← back to AbramsOS

lib/db.js

38 lines

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

const cfg = {
  host: process.env.PG_HOST || 'localhost',
  port: parseInt(process.env.PG_PORT || '5432', 10),
  database: process.env.PG_DATABASE || 'abrams_os',
  user: process.env.PG_USER || process.env.USER,
  max: 10,
  idleTimeoutMillis: 30_000,
};
if (process.env.PG_PASSWORD) cfg.password = process.env.PG_PASSWORD;
const pool = new Pool(cfg);

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

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

async function tx(fn) {
  const client = await pool.connect();
  try {
    await client.query('BEGIN');
    const result = await fn(client);
    await client.query('COMMIT');
    return result;
  } catch (err) {
    await client.query('ROLLBACK');
    throw err;
  } finally {
    client.release();
  }
}

module.exports = { pool, query, tx };