Files

38 lines
1.1 KiB
TypeScript

import "server-only";
import { sql } from "drizzle-orm";
import { drizzle, type PostgresJsDatabase } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import * as schema from "@/modules/core/server/schema";
export type AppDatabase = PostgresJsDatabase<typeof schema>;
let cachedDatabase: AppDatabase | null = null;
let cachedClient: postgres.Sql | null = null;
export function getDatabase(): AppDatabase {
const databaseUrl = process.env.DATABASE_URL;
if (!databaseUrl) {
throw new Error("DATABASE_URL is required for database-backed system configuration");
}
if (!cachedDatabase) {
cachedClient = postgres(databaseUrl, { max: 1 });
cachedDatabase = drizzle(cachedClient, { schema });
}
return cachedDatabase;
}
export async function checkDatabaseConnection(): Promise<{ ok: boolean; reason: string }> {
try {
const database = getDatabase();
await database.execute(sql`select 1`);
return { ok: true, reason: "数据库连接正常" };
} catch (error) {
const reason = error instanceof Error ? error.message : "数据库连接失败";
return { ok: false, reason };
}
}