42 lines
982 B
TypeScript
42 lines
982 B
TypeScript
import { drizzle } from 'drizzle-orm/node-postgres';
|
|
import { Pool } from 'pg';
|
|
import { schema } from './schema';
|
|
|
|
type AppDrizzleDb = ReturnType<typeof createDb>;
|
|
|
|
declare global {
|
|
// eslint-disable-next-line no-var
|
|
var __fiscalPgPool: Pool | undefined;
|
|
// eslint-disable-next-line no-var
|
|
var __fiscalDrizzleDb: AppDrizzleDb | undefined;
|
|
}
|
|
|
|
function getConnectionString() {
|
|
const connectionString = process.env.DATABASE_URL?.trim();
|
|
if (!connectionString) {
|
|
throw new Error('DATABASE_URL is required for PostgreSQL.');
|
|
}
|
|
|
|
return connectionString;
|
|
}
|
|
|
|
export function getPool() {
|
|
if (!globalThis.__fiscalPgPool) {
|
|
globalThis.__fiscalPgPool = new Pool({
|
|
connectionString: getConnectionString()
|
|
});
|
|
}
|
|
|
|
return globalThis.__fiscalPgPool;
|
|
}
|
|
|
|
function createDb() {
|
|
return drizzle(getPool(), { schema });
|
|
}
|
|
|
|
export const db = globalThis.__fiscalDrizzleDb ?? createDb();
|
|
|
|
if (!globalThis.__fiscalDrizzleDb) {
|
|
globalThis.__fiscalDrizzleDb = db;
|
|
}
|