feat: database schema and connection
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
import Database from 'better-sqlite3';
|
||||
import { applySchema } from './schema';
|
||||
|
||||
let _db: Database.Database | null = null;
|
||||
|
||||
export function getDb(path: string = ':memory:'): Database.Database {
|
||||
if (_db) return _db;
|
||||
_db = new Database(path);
|
||||
_db.pragma('journal_mode = WAL');
|
||||
_db.pragma('foreign_keys = ON');
|
||||
applySchema(_db);
|
||||
return _db;
|
||||
}
|
||||
|
||||
export function resetDb(): void {
|
||||
_db = null;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import type { Database } from 'better-sqlite3';
|
||||
|
||||
export function applySchema(db: Database): void {
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS sessions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
date TEXT NOT NULL,
|
||||
duration_min INTEGER NOT NULL,
|
||||
notes TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS schedule (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
date TEXT NOT NULL UNIQUE,
|
||||
planned_min INTEGER NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
skip_reason TEXT,
|
||||
ai_rationale TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL
|
||||
);
|
||||
`);
|
||||
}
|
||||
Reference in New Issue
Block a user