This commit is contained in:
Stefan ATZLESBERGER
2026-04-16 12:55:18 +02:00
parent 97dc4d043a
commit dfbcd20ab6
14 changed files with 723 additions and 116 deletions
+44
View File
@@ -0,0 +1,44 @@
import { Database } from "bun:sqlite";
import { mkdirSync } from "fs";
import path from "path";
let dbInstance: Database | null = null;
function migrate(database: Database) {
database.run(`
CREATE TABLE IF NOT EXISTS snippets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
body TEXT NOT NULL DEFAULT '',
sort_order INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
`);
database.run(`
CREATE TABLE IF NOT EXISTS tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE COLLATE NOCASE
);
`);
database.run(`
CREATE TABLE IF NOT EXISTS snippet_tags (
snippet_id INTEGER NOT NULL REFERENCES snippets(id) ON DELETE CASCADE,
tag_id INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
PRIMARY KEY (snippet_id, tag_id)
);
`);
database.run(`CREATE INDEX IF NOT EXISTS idx_snippets_updated ON snippets(updated_at);`);
}
export function getDb(): Database {
if (dbInstance) return dbInstance;
const dir = path.join(process.cwd(), "data");
mkdirSync(dir, { recursive: true });
const file = path.join(dir, "notes.sqlite");
dbInstance = new Database(file);
dbInstance.run("PRAGMA journal_mode = WAL;");
dbInstance.run("PRAGMA foreign_keys = ON;");
migrate(dbInstance);
return dbInstance;
}