// Author: Simon-Pierre Boucher // Contact: contact@spboucher.ai // Project: chat.spboucher.ai import Database from "better-sqlite3"; import fs from "node:fs"; import path from "node:path"; import { migrate } from "./schema"; const DATA_DIR = path.resolve(/* turbopackIgnore: true */ process.env.CHAT_DATA_DIR || "./data"); let db: Database.Database | null = null; export function dataDir(): string { return DATA_DIR; } export function getDb(): Database.Database { if (db) return db; fs.mkdirSync(DATA_DIR, { recursive: true }); fs.mkdirSync(path.join(DATA_DIR, "uploads"), { recursive: true }); db = new Database(path.join(DATA_DIR, "chat.db")); db.pragma("journal_mode = WAL"); db.pragma("foreign_keys = ON"); db.pragma("busy_timeout = 5000"); migrate(db); return db; }