import fs from "node:fs"; import type { PaperclipConfig } from "../config/schema.js"; import type { CheckResult } from "./index.js"; import { resolveRuntimeLikePath } from "./path-resolver.js"; export async function databaseCheck(config: PaperclipConfig, configPath?: string): 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 `paperclipai configure --section database`", }; } try { const { createDb } = await import("@paperclipai/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 = resolveRuntimeLikePath(config.database.embeddedPostgresDataDir, configPath); const reportedPath = dataDir; if (!fs.existsSync(dataDir)) { fs.mkdirSync(reportedPath, { 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 `paperclipai configure --section database`", }; }