summaryrefslogtreecommitdiff
path: root/packages/db/src/server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/db/src/server.ts')
-rw-r--r--packages/db/src/server.ts66
1 files changed, 66 insertions, 0 deletions
diff --git a/packages/db/src/server.ts b/packages/db/src/server.ts
new file mode 100644
index 0000000..6479b7f
--- /dev/null
+++ b/packages/db/src/server.ts
@@ -0,0 +1,66 @@
+import DB from ".";
+
+const db = new DB();
+const ready = db.init();
+
+type Route = Partial<
+ Record<
+ Bun.Serve.HTTPMethod,
+ Bun.Serve.Handler<Bun.BunRequest, Bun.Server<undefined>, Response>
+ >
+>;
+export const handler: Route = {
+ async GET(req: Bun.BunRequest) {
+ await ready;
+ if (!db.ready) return Response.json({ error: "DB failed to initialize" });
+ // const db = new DB();
+ console.log("Handling HTTP Request on DB", req.url);
+
+ try {
+ const url = new URL(req.url);
+ const params = url.searchParams;
+ const word = params.get("word");
+ const lang = params.get("lang");
+ if (!word) return Response.json({ error: "word param is required" });
+ if (!lang) return Response.json({ error: "lang param is required" });
+ const row = await db.fetchExpressionBySpelling(word, lang);
+ if (!row) return Response.json({ error: "No data found" });
+ else return Response.json({ ok: row });
+ } catch (e) {
+ return Response.json({ error: `${e}` });
+ }
+ },
+ async POST(req: Bun.BunRequest) {
+ await ready;
+ if (!db.ready) return Response.json({ error: "DB failed to initialize" });
+ // const db = new DB();
+ console.log("Handling HTTP Request on DB", req.url);
+
+ try {
+ const reqBody = (await req.json()) as RequestBody;
+ if (!reqBody) return Response.json({ error: "No request body" });
+ const returnData =
+ "getWordFull" in reqBody
+ ? db.fetchExpressionBySpelling(
+ reqBody.getWordFull.spelling,
+ reqBody.getWordFull.lang,
+ )
+ : null;
+ const row = await returnData;
+ console.log({ row });
+ if (!returnData || !row) return Response.json({ error: "No data found" });
+ else return Response.json({ ok: row });
+ } catch (e) {
+ return Response.json({ error: `${e}` });
+ }
+ },
+};
+
+type BySpelling = { spelling: string; lang: string };
+type ByLanguage = string; // iso6393
+type RequestBody =
+ | { getWordFull: BySpelling }
+ | { getWordsenses: BySpelling }
+ | { getWordPhonetics: BySpelling }
+ | { getLanguages: null }
+ | { getExpressions: ByLanguage };