import Database from 'better-sqlite3'; import { mkdirSync } from 'fs'; import { dirname } from 'path'; let db: Database.Database | null = null; function dbPath(): string { return process.env.DB_PATH || './data/arbeitszeit.db'; } /** Singleton-Zugriff auf die SQLite-Datenbank. Legt Datei + Schema beim ersten Aufruf an. */ export function getDb(): Database.Database { if (db) return db; const path = dbPath(); mkdirSync(dirname(path), { recursive: true }); db = new Database(path); db.pragma('journal_mode = WAL'); db.exec(` CREATE TABLE IF NOT EXISTS arbeitszeit ( id INTEGER PRIMARY KEY AUTOINCREMENT, datum TEXT NOT NULL, ort TEXT NOT NULL, beginn TEXT NOT NULL, ende TEXT NOT NULL, reisezeit REAL NOT NULL DEFAULT 0, vertriebsunterstuetzung REAL NOT NULL DEFAULT 2, kommentar TEXT NOT NULL DEFAULT '', created_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE INDEX IF NOT EXISTS idx_arbeitszeit_datum ON arbeitszeit (datum); CREATE TABLE IF NOT EXISTS settings ( key TEXT PRIMARY KEY, value TEXT NOT NULL ); `); // Standard-Pause beim ersten Start setzen (0,5 h) db.prepare( `INSERT INTO settings (key, value) VALUES ('pause', '0.5') ON CONFLICT(key) DO NOTHING` ).run(); return db; }