import { Pool } from "pg"; // Database configuration export interface DatabaseConfig { host: string; port: number; database: string; username: string; password: string; } export function getDatabaseConfig(): DatabaseConfig { // Parse DATABASE_URL if it exists, otherwise use individual env vars if (process.env.DATABASE_URL) { const url = new URL(process.env.DATABASE_URL); return { host: url.hostname, port: parseInt(url.port) || 5432, database: url.pathname.slice(1), // Remove leading slash username: url.username, password: url.password, }; } return { host: process.env.DB_HOST || "localhost", port: parseInt(process.env.DB_PORT || "5432"), database: process.env.DB_NAME || "reya_render", username: process.env.DB_USER || "miranshala", password: process.env.DB_PASSWORD || "", }; } // Create a connection pool let pool: Pool | null = null; export function getPool(): Pool { if (!pool) { const config = getDatabaseConfig(); pool = new Pool({ host: config.host, port: config.port, database: config.database, user: config.username, password: config.password, max: 20, // Maximum number of clients in the pool idleTimeoutMillis: 30000, // Close idle clients after 30 seconds connectionTimeoutMillis: 2000, // Return an error after 2 seconds if connection could not be established }); } return pool; } // Test database connection export async function testConnection(): Promise { try { const pool = getPool(); const client = await pool.connect(); await client.query("SELECT NOW()"); client.release(); console.log("Database connection successful"); return true; } catch (error) { console.error("Database connection failed:", error); return false; } }