Files
pagodera/lib/db/test-connection.ts
T
Evandro Fonseca Junior 55eebde0ba feat: add user authentication UI to header component
Add login and register dialogs, user dropdown menu with profile link and logout option, and integrate with session management hook. Prevent hydration mismatches by conditionally rendering auth elements after mount. Update package-lock.json with new @esbuild dependencies for build tooling.
2025-11-04 02:33:29 -03:00

100 lines
3.3 KiB
TypeScript

/**
* Script de teste de conexão com PostgreSQL
* Executa um health check e tenta uma query simples
*/
// Carregar variáveis de ambiente
import { config } from "dotenv";
import { resolve } from "path";
// Tentar carregar .env.local primeiro, depois .env
config({ path: resolve(process.cwd(), ".env.local") });
config({ path: resolve(process.cwd(), ".env") });
import { healthCheck, query, closePool } from "./index";
async function testConnection() {
console.log("🔍 Testando conexão com PostgreSQL...\n");
// Verificar variável de ambiente
if (!process.env.PG_DB) {
console.error("❌ PG_DB não está definido nas variáveis de ambiente");
console.log("\n💡 Configure a variável PG_DB:");
console.log(" export PG_DB=postgresql://user:pass@host:port/db");
console.log(" ou crie um arquivo .env.local com:");
console.log(" PG_DB=postgresql://user:pass@host:port/db\n");
process.exit(1);
}
console.log("✅ Variável PG_DB encontrada");
console.log(` Host: ${process.env.PG_DB.split("@")[1]?.split("/")[0] || "não detectado"}\n`);
try {
// Health check
console.log("📡 Executando health check...");
const isHealthy = await healthCheck();
if (!isHealthy) {
console.error("❌ Health check falhou - banco não está acessível");
process.exit(1);
}
console.log("✅ Health check passou\n");
// Query de teste
console.log("📊 Executando query de teste...");
const result = await query("SELECT version(), NOW() as current_time");
console.log("✅ Query executada com sucesso");
console.log(` PostgreSQL Version: ${result.rows[0]?.version?.split(" ")[0] || "N/A"}`);
console.log(` Current Time: ${result.rows[0]?.current_time || "N/A"}\n`);
// Verificar se as tabelas existem
console.log("🔍 Verificando tabelas...");
const tablesResult = await query(`
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('users', 'user_characters')
ORDER BY table_name
`);
const tables = tablesResult.rows.map((row: any) => row.table_name);
if (tables.length === 0) {
console.log("⚠️ Tabelas não encontradas. Execute as migrations:");
console.log(" pnpm db:migrate\n");
} else {
console.log(`✅ Tabelas encontradas: ${tables.join(", ")}\n`);
}
console.log("🎉 Conexão com PostgreSQL está funcionando corretamente!");
// Fechar pool
await closePool();
process.exit(0);
} catch (error) {
console.error("❌ Erro ao conectar com PostgreSQL:");
console.error(error instanceof Error ? error.message : String(error));
if (error instanceof Error && error.message.includes("timeout")) {
console.log("\n💡 Verifique:");
console.log(" - O servidor PostgreSQL está acessível?");
console.log(" - A URL de conexão está correta?");
console.log(" - O firewall permite conexões?");
}
if (error instanceof Error && error.message.includes("authentication")) {
console.log("\n💡 Verifique:");
console.log(" - Usuário e senha estão corretos?");
console.log(" - O usuário tem permissão para acessar o banco?");
}
await closePool();
process.exit(1);
}
}
testConnection();