← 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 };