diff --git a/.gitignore b/.gitignore index 32237f20..fb0c48ac 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ node_modules dist dev.db* migrations +sqlite.db diff --git a/bun.lockb b/bun.lockb index c3f41cb1..89db077c 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 00000000..6708988d --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,10 @@ +import type { Config } from "drizzle-kit"; + +export default { + out: "./service/db/migrations", + schema: "./service/db/schema.ts", + driver: "better-sqlite", + dbCredentials: { + url: "sqlite.db", + }, +} satisfies Config; diff --git a/package.json b/package.json index ac0997de..2dceba99 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,11 @@ "service": "bun --watch service/index.ts", "generate": "prisma generate", "tsc": "vue-tsc", - "init-db": "prisma init --datasource-provider sqlite", + "init-prisma": "prisma init --datasource-provider sqlite", "migrate": "prisma migrate dev --name init", - "kill-vlmcsd": "pkill -f vlmcsd" + "kill-vlmcsd": "pkill -f vlmcsd", + "db-studio": "drizzle-kit studio", + "init-db": "drizzle-kit generate:sqlite && bun service/scripts/migrate.ts" }, "dependencies": { "@arco-design/web-vue": "^2.55.1", diff --git a/service/db/schema.ts b/service/db/schema.ts new file mode 100644 index 00000000..66ae7360 --- /dev/null +++ b/service/db/schema.ts @@ -0,0 +1,7 @@ +import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; + +export const record = sqliteTable("record", { + id: integer("id", { mode: "number" }).primaryKey({ autoIncrement: true }), + name: text("name").notNull(), + createdAt: integer("created_at").notNull(), +}); diff --git a/service/index.ts b/service/index.ts index a60ee46c..fc706d56 100644 --- a/service/index.ts +++ b/service/index.ts @@ -2,6 +2,12 @@ import { Elysia } from 'elysia' import { staticPlugin } from '@elysiajs/static' import { arch, platform } from 'os' import { $ } from 'bun' +import { drizzle } from 'drizzle-orm/bun-sqlite' +import { Database } from 'bun:sqlite' +import * as schema from './db/schema' + +const sqlite = new Database('sqlite.db') +const db = drizzle(sqlite, { schema }) const app = new Elysia() @@ -14,8 +20,14 @@ app.use( app.get('/*', () => Bun.file('dist/index.html')) +app.get('/api/record', async () => { + return await db.query.record.findMany() +}) + app.listen(3000) +console.log(`Elysia is running at on port ${app.server?.url} ...`) + try { platform() === 'win32' ? await $`taskkill /IM vlmcsd* /F`.nothrow() @@ -24,8 +36,6 @@ try { console.error(err) } -console.log(`Elysia is running at on port ${app.server?.url} ...`) - const vlmcsd = Bun.spawnSync([ `./service/binaries/vlmcsd-${platform()}-${arch()}`, ]) diff --git a/service/scripts/migrate.ts b/service/scripts/migrate.ts new file mode 100644 index 00000000..ace93ccd --- /dev/null +++ b/service/scripts/migrate.ts @@ -0,0 +1,8 @@ +import { Database } from 'bun:sqlite' +import { drizzle } from "drizzle-orm/bun-sqlite"; +import { migrate } from "drizzle-orm/bun-sqlite/migrator"; + +const sqlite = new Database("sqlite.db"); +const db = drizzle(sqlite); + +migrate(db, { migrationsFolder: "./service/db/migrations" });