import { DatabaseSync } from "node:sqlite"; const DB_PATH = process.env.RIKX_PLATFORM_DB_PATH || "/rikx-platform-data/app.db"; let _db: DatabaseSync | null = null; export function getPlatformDb(): DatabaseSync { if (!_db) { _db = new DatabaseSync(DB_PATH); _db.exec("PRAGMA journal_mode = WAL"); _db.exec("PRAGMA foreign_keys = ON"); } return _db; } export type PlatformAccount = { id: number; name: string; slug: string; created_at: string; }; export type PlatformUser = { id: number; account_id: number; email: string; name: string; role: string; created_at: string; }; export function listAccounts(): (PlatformAccount & { user_count: number })[] { return getPlatformDb() .prepare( `SELECT a.*, COUNT(u.id) as user_count FROM accounts a LEFT JOIN users u ON u.account_id = a.id GROUP BY a.id ORDER BY a.created_at DESC` ) .all() as (PlatformAccount & { user_count: number })[]; } export function getAccount(id: number): PlatformAccount | undefined { return getPlatformDb() .prepare("SELECT * FROM accounts WHERE id = ?") .get(id) as PlatformAccount | undefined; } // Namen van alle sociaal ondernemers, voor keuzelijsten en overzichten in Rikx Beheer. // Geeft een lege lijst als de platformdatabase niet bereikbaar is, zodat projectpagina's blijven werken. export function listAccountNames(): { id: number; name: string }[] { try { return ( getPlatformDb().prepare("SELECT id, name FROM accounts ORDER BY name COLLATE NOCASE").all() as { id: number; name: string; }[] ).map((a) => ({ id: a.id, name: a.name })); } catch (err) { console.error("Platformdatabase niet bereikbaar:", err); return []; } }