feat: add sqlite db
This commit is contained in:
@@ -28,6 +28,11 @@ yarn-error.log*
|
||||
# local env files
|
||||
.env*.local
|
||||
|
||||
# SQLite database files
|
||||
/data/*.db
|
||||
/data/*.db-shm
|
||||
/data/*.db-wal
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import { defineConfig } from "drizzle-kit";
|
||||
|
||||
export default defineConfig({
|
||||
dialect: "sqlite",
|
||||
schema: "./src/db/schema/index.ts",
|
||||
out: "./src/db/migrations",
|
||||
dbCredentials: {
|
||||
url: process.env.APP_DB_PATH
|
||||
? `file:${process.env.APP_DB_PATH}`
|
||||
: "file:./data/app.db",
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,7 @@
|
||||
export async function register() {
|
||||
// Only run on the Node.js server, not in the Edge runtime or client
|
||||
if (process.env.NEXT_RUNTIME === "nodejs") {
|
||||
const { runMigrations } = await import("./src/db");
|
||||
await runMigrations();
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -6,7 +6,11 @@
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start -p ${PORT:=3000} -H ${HOST:=0.0.0.0}",
|
||||
"lint": "next lint"
|
||||
"lint": "next lint",
|
||||
"db:generate": "drizzle-kit generate --config=drizzle.app.config.ts",
|
||||
"db:migrate": "drizzle-kit migrate --config=drizzle.app.config.ts",
|
||||
"db:studio": "drizzle-kit studio --config=drizzle.app.config.ts",
|
||||
"db:push": "drizzle-kit push --config=drizzle.app.config.ts"
|
||||
},
|
||||
"author": {
|
||||
"name": "Varun Raj Manoharan",
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import { createClient } from "@libsql/client";
|
||||
import { drizzle } from "drizzle-orm/libsql";
|
||||
import { migrate } from "drizzle-orm/libsql/migrator";
|
||||
import path from "path";
|
||||
import * as schema from "./schema";
|
||||
|
||||
const DB_PATH =
|
||||
process.env.APP_DB_PATH || path.join(process.cwd(), "data", "app.db");
|
||||
|
||||
const client = createClient({ url: `file:${DB_PATH}` });
|
||||
|
||||
export const appDb = drizzle(client, { schema });
|
||||
|
||||
// Run pending migrations automatically on startup.
|
||||
// migrate() is idempotent — safe to call on every boot.
|
||||
export async function runMigrations() {
|
||||
await migrate(appDb, {
|
||||
migrationsFolder: path.join(process.cwd(), "src", "db", "migrations"),
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": "5",
|
||||
"dialect": "sqlite",
|
||||
"entries": []
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export * from "./settings.schema";
|
||||
@@ -0,0 +1,9 @@
|
||||
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
||||
|
||||
export const settings = sqliteTable("settings", {
|
||||
key: text("key").primaryKey(),
|
||||
value: text("value").notNull(),
|
||||
updatedAt: integer("updated_at", { mode: "timestamp" }).$onUpdate(
|
||||
() => new Date()
|
||||
),
|
||||
});
|
||||
Reference in New Issue
Block a user