From 901172d43ea125f711b5f65a82d8c254f424bb0a Mon Sep 17 00:00:00 2001 From: Ethan Niser <100045248+ethanniser@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:05:34 +0000 Subject: [PATCH] idk --- .vscode/settings.json | 3 --- bun.lockb | Bin 140777 -> 149930 bytes drizzle.config.ts | 14 ++++++++----- package.json | 6 ++++-- src/config/index.ts | 11 ++++++---- src/context/index.ts | 46 ++++++++++++++++++++---------------------- src/db/index.ts | 14 ++++++------- src/main.ts | 21 +++++++++++++++---- 8 files changed, 66 insertions(+), 49 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 25fa621..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "typescript.tsdk": "node_modules/typescript/lib" -} diff --git a/bun.lockb b/bun.lockb index c9fb5709c24f4cd6bca1a21c15607cab7e5b43d7..7bf28e8bd89abc2a2a5fd7724b530bcd7b36f6ed 100755 GIT binary patch delta 31149 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 X2A-ePHR(3 { + // not needed for local only + const type = process.env.DATABASE_CONNECTION_TYPE; + return type === "remote" || type === "local-replica" ? s && s.length > 0 : true; + }), NODE_ENV: z.enum(["development", "production"]), - COOKIE_SECRET: z.string().min(1), - TURSO_API_TOKEN: z.string().min(1), }, runtimeEnv: process.env, }); diff --git a/src/context/index.ts b/src/context/index.ts index 637b2c8..70887ac 100644 --- a/src/context/index.ts +++ b/src/context/index.ts @@ -1,4 +1,5 @@ import { logger } from "@bogeychan/elysia-logger"; +import { cron } from "@elysiajs/cron"; import { HoltLogger } from "@tlscipher/holt"; import { bethStack } from "beth-stack/elysia"; import { Elysia } from "elysia"; @@ -7,8 +8,6 @@ import { auth } from "../auth"; import { config } from "../config"; import { client, db } from "../db"; -// import { cron } from "@elysiajs/cron"; - const stream = pretty({ colorize: true, }); @@ -16,12 +15,12 @@ const stream = pretty({ export const ctx = new Elysia({ name: "@app/ctx", }) - .use( - bethStack({ - // log: false, - returnStaleWhileRevalidate: false, - }), - ) + // .use( + // bethStack({ + // // log: false, + // returnStaleWhileRevalidate: false, + // }), + // ) .use( logger({ level: config.env.LOG_LEVEL, @@ -29,22 +28,21 @@ export const ctx = new Elysia({ }), ) .use(new HoltLogger().getLogger()) - // .use( - // cron({ - // name: "heartbeat", - // pattern: "*/1 * * * * *", - // run() { - // if (config.env.SYNC_URL) { - // const now = performance.now(); - // console.log("Syncing database..."); - // void client.sync().then(() => { - // console.log(`Database synced in ${performance.now() - now}ms`); - // }); - // } - // }, - // }) - // ) - .decorate("db", () => db) + .use( + // @ts-expect-error + cron({ + name: "heartbeat", + pattern: "*/2 * * * * *", + run() { + const now = performance.now(); + console.log("Syncing database..."); + void client.sync().then(() => { + console.log(`Database synced in ${performance.now() - now}ms`); + }); + }, + }), + ) + .decorate("db", db) .decorate("config", config) .decorate("auth", auth); // .onStart(({ log }) => log.info("Server starting")); diff --git a/src/db/index.ts b/src/db/index.ts index a02e4e2..67aa616 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -8,14 +8,14 @@ const remoteOptions = { authToken: config.env.DATABASE_AUTH_TOKEN, }; -// const localOptions = { -// url: "file:local.sqlite", -// authToken: config.env.DATABASE_AUTH_TOKEN, -// syncUrl: config.env.DATABASE_URL, -// }; +const localOptions = { + url: "file:local.sqlite", + authToken: config.env.DATABASE_AUTH_TOKEN, + syncUrl: config.env.DATABASE_URL, +}; -export const client = createClient(remoteOptions); +export const client = createClient(localOptions); -// await client.sync(); +await client.sync(); export const db = drizzle(client, { schema, logger: true }); diff --git a/src/main.ts b/src/main.ts index 6df42fd..3b4ecb2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,17 +2,30 @@ import { staticPlugin } from "@elysiajs/static"; // import { swagger } from "@elysiajs/swagger"; import { Elysia } from "elysia"; import { config } from "./config"; +import { ctx } from "./context"; import { api } from "./controllers/*"; +import { todos } from "./db/schema"; import { pages } from "./pages/*"; + const app = new Elysia({ name: "@app/app", }) // .use(swagger()) //@ts-expect-error - .use(staticPlugin()) - .use(api) - .use(pages) + // .use(staticPlugin()) + // .use(api) + // .use(pages) + .use(ctx) + .get("/create", async (ctx) => { + const todo = await ctx.db.insert(todos).values({ content: "Hello World" }).returning(); + + return todo; + }) + .get("/all", async (ctx) => { + const result = await ctx.db.select().from(todos); + return result + }) .onStart(() => { if (config.env.NODE_ENV === "development") { void fetch("http://localhost:3001/restart"); @@ -28,4 +41,4 @@ export type App = typeof app; console.log( `app is listening on http://${app.server?.hostname}:${app.server?.port}`, -); +); \ No newline at end of file