| 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<CheckResult> { |
| 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 `penclip configure --section database`", |
| }; |
| } |
|
|
| try { |
| const { createDb } = await import("@penclipai/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 `penclip configure --section database`", |
| }; |
| } |
|
|