agendapro/src/lib/db.ts

42 lines
1.2 KiB
TypeScript

import { Pool } from 'pg';
const connectionString = process.env.DATABASE_URL || 'postgresql://agendapro:agendapro123@localhost:5432/agendapro';
// Extract password from connectionString manually just to check, or provide a fallback
let fallbackPassword = process.env.DB_PASSWORD || process.env.POSTGRES_PASSWORD || '';
try {
const url = new URL(connectionString);
if (!url.password) {
fallbackPassword = process.env.DB_PASSWORD || process.env.POSTGRES_PASSWORD || 'agendapro123';
}
} catch (e) {}
const pool = new Pool({
connectionString,
password: fallbackPassword,
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
});
pool.on('error', (err) => {
console.error('Unexpected error on idle client', err);
});
export async function query(text: string, params?: unknown[]) {
const start = Date.now();
const res = await pool.query(text, params);
const duration = Date.now() - start;
if (process.env.NODE_ENV === 'development') {
console.log('Executed query', { text: text.substring(0, 80), duration, rows: res.rowCount });
}
return res;
}
export async function getClient() {
const client = await pool.connect();
return client;
}
export default pool;