import fs from "node:fs"; import path from "node:path"; import type { PaperclipConfig } from "../config/schema.js"; import type { CheckResult } from "./index.js"; export async function databaseCheck(config: PaperclipConfig): Promise { if (config.database.mode === "postgres") { if (!config.database.connectionString) { return { name: "Database", status: "fail", message: "PostgreSQL mode selected but no connection string configured", canRepair: false, repairHint: "Run `paperclip configure --section database`", }; } try { const { createDb } = await import("@paperclip/db"); const db = createDb(config.database.connectionString); await db.execute("SELECT 1"); return { name: "Database", status: "pass", message: "PostgreSQL connection successful", }; } catch (err) { return { name: "Database", status: "fail", message: `Cannot connect to PostgreSQL: ${err instanceof Error ? err.message : String(err)}`, canRepair: false, repairHint: "Check your connection string and ensure PostgreSQL is running", }; } } if (config.database.mode === "embedded-postgres") { const dataDir = path.resolve(config.database.embeddedPostgresDataDir); if (!fs.existsSync(dataDir)) { return { name: "Database", status: "warn", message: `Embedded PostgreSQL data directory does not exist: ${dataDir}`, canRepair: true, repair: () => { fs.mkdirSync(dataDir, { recursive: true }); }, }; } return { name: "Database", status: "pass", message: `Embedded PostgreSQL configured at ${dataDir} (port ${config.database.embeddedPostgresPort})`, }; } return { name: "Database", status: "fail", message: `Unknown database mode: ${String(config.database.mode)}`, canRepair: false, repairHint: "Run `paperclip configure --section database`", }; }