const { Pool } = require("pg"); const logger = require("./logger"); require("dotenv").config(); const pool = new Pool({ host: process.env.DB_HOST || "localhost", port: process.env.DB_PORT || 5432, database: process.env.DB_NAME || "skyartshop", user: process.env.DB_USER || "skyartapp", password: process.env.DB_PASSWORD, max: 20, idleTimeoutMillis: 30000, connectionTimeoutMillis: 2000, }); pool.on("connect", () => logger.info("✓ PostgreSQL connected")); pool.on("error", (err) => logger.error("PostgreSQL error:", err)); const query = async (text, params) => { const start = Date.now(); try { const res = await pool.query(text, params); const duration = Date.now() - start; logger.debug("Executed query", { duration, rows: res.rowCount }); return res; } catch (error) { logger.error("Query error:", { text, error: error.message }); throw error; } }; // Transaction helper const transaction = async (callback) => { const client = await pool.connect(); try { await client.query("BEGIN"); const result = await callback(client); await client.query("COMMIT"); return result; } catch (error) { await client.query("ROLLBACK"); logger.error("Transaction rolled back:", error); throw error; } finally { client.release(); } }; // Health check const healthCheck = async () => { try { const result = await query( "SELECT NOW() as time, current_database() as database" ); return { healthy: true, database: result.rows[0].database, timestamp: result.rows[0].time, }; } catch (error) { logger.error("Database health check failed:", error); return { healthy: false, error: error.message, }; } }; module.exports = { pool, query, transaction, healthCheck };