aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/get.ts61
-rw-r--r--src/index.ts15
2 files changed, 74 insertions, 2 deletions
diff --git a/src/get.ts b/src/get.ts
new file mode 100644
index 0000000..a9eebbc
--- /dev/null
+++ b/src/get.ts
@@ -0,0 +1,61 @@
+import type { Sql } from "postgres";
+
+const book = Bun.file("book/the_wonderful_wizard_of_oz.txt");
+const book_text = await book.text()
+const pars = book_text.split(/\n\s*\n/);
+
+export async function get_home(context: { headers: Record<string, string | null> }) {
+ const file = Bun.file("page/index.txt");
+
+ let res = new Response(
+ await file.text() +
+ `the following is a randomly selected excerpt from THE WONDERFUL WIZARD
+OF OZ by L. FRANK BAUM\n\n` +
+ pars[Math.floor(Math.random() * pars.length)]
+ );
+
+ if (context.headers["user-agent"] ?? "".includes("curl")) {
+ res.headers.set("X-Message", "Okay I Like It, Picasso");
+ }
+
+ return res;
+}
+
+export async function get_id(
+ context: { params: Record<"id", string>, headers: Record<string, string | null> },
+ sql: Sql) {
+
+ const id = context.params.id;
+ let db_res = await sql`
+ SELECT * FROM urls
+ WHERE id=${id}
+ `
+
+ if (!db_res.length) {
+ return new Response(`url for id '${id}' not found.`, { status: 404 });
+ }
+
+ const url = new URL(db_res[0]['url']);
+
+ const html = `
+ <!DOCTYPE html>
+ <html>
+ <head><title>trkt</title></head>
+ <body>
+ <p>redirecting to <a href="${url.href}">${url.href}</a></p>
+ </body>
+ </html>
+ `;
+
+ const res = new Response(html, { status: 301 });
+ res.headers.set("Location", url.href);
+ res.headers.set("Cache-Control", "max-age=3");
+ res.headers.set("Content-Type", "text/html");
+
+ if (context.headers["user-agent"] ?? "".includes("curl")) {
+ res.headers.set("X-Message", "Okay I Like It, Picasso");
+ }
+
+ console.log(res);
+ return res;
+}
diff --git a/src/index.ts b/src/index.ts
index 9c1f7a1..119ea91 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,7 +1,18 @@
import { Elysia } from "elysia";
+import postgres from "postgres";
-const app = new Elysia().get("/", () => "Hello Elysia").listen(3000);
+import { get_home, get_id } from "./get";
+
+const sql = postgres();
+
+const app = new Elysia()
+ .get("/", ({ headers }) => get_home({ headers: headers }))
+ .get("/:id", async ({ params, headers, }) => get_id(
+ { params: params, headers: headers }, sql)
+ )
+
+app.listen(3000)
console.log(
- `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`
+ `listening at ${app.server?.hostname}:${app.server?.port}`
);