← back to Jill Website
src/config/database.ts
56 lines
import { Pool, PoolConfig } from 'pg';
import * as dotenv from 'dotenv';
dotenv.config();
const poolConfig: PoolConfig = {
host: process.env.DB_HOST || 'localhost',
port: parseInt(process.env.DB_PORT || '5432'),
database: process.env.DB_NAME || 'jill_website',
user: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || '',
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
};
let pool: Pool | null = null;
export const getPool = (): Pool => {
if (!pool) {
pool = new Pool(poolConfig);
pool.on('error', (err: Error) => {
console.error('Unexpected database error:', err);
process.exit(-1);
});
pool.on('connect', () => {
console.log('Database connection established');
});
}
return pool;
};
export const testConnection = async (): Promise<boolean> => {
try {
const client = await getPool().connect();
await client.query('SELECT NOW()');
client.release();
console.log('Database connection test successful');
return true;
} catch (error) {
console.error('Database connection test failed:', error);
throw new Error(`Failed to connect to database: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
};
export const closePool = async (): Promise<void> => {
if (pool) {
await pool.end();
pool = null;
console.log('Database connection pool closed');
}
};