// server/db/client.ts import Database from "better-sqlite3"; import { drizzle } from "drizzle-orm/better-sqlite3"; import { mkdirSync, existsSync, rmSync, renameSync } from "node:fs"; import { dirname } from "node:path"; import { env } from "../env.js"; import * as schema from "./schema.js"; mkdirSync(dirname(env.dbPath), { recursive: true }); // Restauration en attente : un fichier `.incoming` déposé par /system/db/restore // est appliqué au démarrage (swap hors-ligne = aucune corruption d'une base ouverte). const incoming = `${env.dbPath}.incoming`; if (existsSync(incoming)) { for (const ext of ["", "-wal", "-shm"]) { const p = `${env.dbPath}${ext}`; if (existsSync(p)) rmSync(p, { force: true }); } renameSync(incoming, env.dbPath); } const sqlite = new Database(env.dbPath); sqlite.pragma("journal_mode = WAL"); sqlite.pragma("foreign_keys = ON"); export const db = drizzle(sqlite, { schema }); export { schema, sqlite };