← back to Dw Boardroom V2
src/db/sqlite.ts
46 lines
// ═══════════════════════════════════════════════
// DW Boardroom V2 — SQLite Database Wrapper
// Ephemeral meeting data stored locally
// ═══════════════════════════════════════════════
import Database from 'better-sqlite3';
import path from 'path';
const DB_PATH = path.join(__dirname, '..', '..', 'boardroom.db');
let db: Database.Database;
export function getDb(): Database.Database {
if (!db) {
db = new Database(DB_PATH);
db.pragma('journal_mode = WAL');
db.pragma('foreign_keys = ON');
}
return db;
}
export function query<T = any>(sql: string, params: any[] = []): T[] {
const stmt = getDb().prepare(sql);
return stmt.all(...params) as T[];
}
export function queryOne<T = any>(sql: string, params: any[] = []): T | undefined {
const stmt = getDb().prepare(sql);
return stmt.get(...params) as T | undefined;
}
export function run(sql: string, params: any[] = []): Database.RunResult {
const stmt = getDb().prepare(sql);
return stmt.run(...params);
}
export function exec(sql: string): void {
getDb().exec(sql);
}
export function closeDb(): void {
if (db) {
db.close();
}
}