import pg from 'pg' const { Pool } = pg let pool: pg.Pool | null = null /** * PostgreSQL 연결 풀 가져오기 */ export function getPool(): pg.Pool { if (!pool) { const poolConfig = { host: process.env.DB_HOST || 'localhost', port: parseInt(process.env.DB_PORT || '5432'), database: process.env.DB_NAME || 'weeklyreport', user: process.env.DB_USER || 'postgres', password: process.env.DB_PASSWORD || '', max: 10, idleTimeoutMillis: 30000, connectionTimeoutMillis: 2000, } console.log(`[DB] Connecting to ${poolConfig.host}:${poolConfig.port}/${poolConfig.database}`) pool = new Pool(poolConfig) pool.on('error', (err) => { console.error('[DB] Unexpected pool error:', err) }) console.log('[DB] PostgreSQL pool created') } return pool } /** * 쿼리 실행 */ export async function query(sql: string, params?: any[]): Promise { const pool = getPool() const result = await pool.query(sql, params) return result.rows as T[] } /** * 단일 행 조회 */ export async function queryOne(sql: string, params?: any[]): Promise { const rows = await query(sql, params) return rows[0] || null } /** * INSERT/UPDATE/DELETE 실행 */ export async function execute(sql: string, params?: any[]): Promise { const pool = getPool() const result = await pool.query(sql, params) return result.rowCount || 0 } /** * INSERT 후 반환 */ export async function insertReturning(sql: string, params?: any[]): Promise { const pool = getPool() const result = await pool.query(sql, params) return result.rows[0] || null }