// knexfile.js require('dotenv').config(); function must(name) { const v = process.env[name]; if (!v) throw new Error(`${name} não definido no .env`); return v; } const shared = { client: 'pg', migrations: { directory: './src/db/migrations', }, }; function buildConnectionFromEnv() { // Se houver DATABASE_URL, usa-o. // Se PGSSL=true, aplica ssl no formato esperado pelo driver pg (dentro de connection). const ssl = process.env.PGSSL === 'true' ? { rejectUnauthorized: false } : undefined; if (process.env.DATABASE_URL) { // knex aceita string, mas o ssl precisa estar no objeto: return ssl ? { connectionString: process.env.DATABASE_URL, ssl } : process.env.DATABASE_URL; } // fallback para vars soltas return { host: process.env.PGHOST || '127.0.0.1', port: Number(process.env.PGPORT || 5432), user: process.env.PGUSER || 'postgres', password: process.env.PGPASSWORD || 'postgres', database: process.env.PGDATABASE || 'evse', ...(ssl ? { ssl } : {}), }; } module.exports = { development: { ...shared, connection: buildConnectionFromEnv(), }, production: { ...shared, // Em produção normalmente queres obrigar DATABASE_URL (se for o teu caso): // connection: must('DATABASE_URL'), // Mas mantendo compatível com vars soltas: connection: buildConnectionFromEnv(), pool: { min: 2, max: 10 }, }, };