feat: add SQLite database and persistent task schema
This commit is contained in:
36
lib/db.ts
36
lib/db.ts
@@ -0,0 +1,36 @@
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { DatabaseSync } from "node:sqlite";
|
||||
|
||||
type DatabaseGlobal = typeof globalThis & {
|
||||
plannerDatabase?: DatabaseSync;
|
||||
plannerDatabasePath?: string;
|
||||
};
|
||||
|
||||
const schemaPath = path.join(process.cwd(), "db", "schema.sql");
|
||||
const defaultDatabasePath = path.join(process.cwd(), "data", "planner.sqlite");
|
||||
|
||||
export function getDatabase() {
|
||||
const databasePath = process.env.TASKS_DB_PATH ?? defaultDatabasePath;
|
||||
const globalDatabase = globalThis as DatabaseGlobal;
|
||||
|
||||
if (
|
||||
globalDatabase.plannerDatabase &&
|
||||
globalDatabase.plannerDatabasePath === databasePath
|
||||
) {
|
||||
return globalDatabase.plannerDatabase;
|
||||
}
|
||||
|
||||
fs.mkdirSync(path.dirname(databasePath), { recursive: true });
|
||||
|
||||
const database = new DatabaseSync(databasePath);
|
||||
const schema = fs.readFileSync(schemaPath, "utf8");
|
||||
|
||||
database.exec("PRAGMA foreign_keys = ON;");
|
||||
database.exec(schema);
|
||||
|
||||
globalDatabase.plannerDatabase = database;
|
||||
globalDatabase.plannerDatabasePath = databasePath;
|
||||
|
||||
return database;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user