← 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();
  }
}