← back to Ventura Claw Leads

lib/db.js

43 lines

const { Pool } = require('pg');

// Empty PGPASSWORD triggers SASL auth which fails with "client password must
// be a string"; strip it so trust-auth on local dev works.
if (process.env.PGPASSWORD === '') delete process.env.PGPASSWORD;

const pgConfig = {
  host: process.env.PGHOST || 'localhost',
  port: parseInt(process.env.PGPORT || '5432', 10),
  database: process.env.PGDATABASE || 'ventura_claw_leads',
  user: process.env.PGUSER || process.env.USER,
  max: 10,
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 8000
};
if (process.env.PGPASSWORD && process.env.PGPASSWORD.length > 0) pgConfig.password = process.env.PGPASSWORD;
// Allow DATABASE_URL to override piecewise config in production.
if (process.env.NODE_ENV === 'production' && process.env.DATABASE_URL) {
  Object.keys(pgConfig).forEach(k => delete pgConfig[k]);
  pgConfig.connectionString = process.env.DATABASE_URL;
}
const pool = new Pool(pgConfig);

pool.on('error', (err) => {
  console.error('[db] idle client error', err.code, err.message);
});

async function query(text, params) {
  return pool.query(text, params);
}

async function one(text, params) {
  const r = await pool.query(text, params);
  return r.rows[0] || null;
}

async function many(text, params) {
  const r = await pool.query(text, params);
  return r.rows;
}

module.exports = { pool, query, one, many };