← back to Rentv Adintel
db/index.js
44 lines
'use strict';
/**
* Postgres connection pool — the single source of truth (spec §5).
* House convention: local unix socket at /tmp, database `rentv_advertisers`.
* DATABASE_URL overrides for production / CI.
*/
const { Pool } = require('pg');
const pool = process.env.DATABASE_URL
? new Pool({ connectionString: process.env.DATABASE_URL })
: new Pool({
host: process.env.PGHOST || '/tmp',
database: process.env.PGDATABASE || 'rentv_advertisers',
user: process.env.PGUSER || process.env.USER,
max: 10,
});
pool.on('error', (err) => {
// eslint-disable-next-line no-console
console.error('[db] idle client error', err.message);
});
async function query(text, params) {
return pool.query(text, params);
}
/** Convenience: run inside a transaction, auto rollback on throw. */
async function tx(fn) {
const client = await pool.connect();
try {
await client.query('BEGIN');
const out = await fn(client);
await client.query('COMMIT');
return out;
} catch (e) {
await client.query('ROLLBACK');
throw e;
} finally {
client.release();
}
}
module.exports = { pool, query, tx };