← back to Nineoh Guide

apps/web/lib/db.ts

29 lines

import { Pool } from "pg";

/**
 * Single shared pg Pool. In dev we connect to the local Postgres socket; in
 * production DATABASE_URL points at Neon/Vercel Postgres. Cached on globalThis
 * so Next's hot-reload doesn't open a new pool per request.
 */
const globalForDb = globalThis as unknown as { _pgPool?: Pool };

export const pool =
  globalForDb._pgPool ??
  new Pool({
    connectionString:
      process.env.DATABASE_URL ??
      "postgresql://localhost/nineoh_guide?host=/tmp",
    max: 5,
  });

if (process.env.NODE_ENV !== "production") globalForDb._pgPool = pool;

export async function dbOk(): Promise<boolean> {
  try {
    const { rows } = await pool.query("select 1 as ok");
    return rows[0]?.ok === 1;
  } catch {
    return false;
  }
}