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.
This commit is contained in:
Evandro Fonseca Junior committed 2025-11-04 02:33:29 -03:00
1 parent e641138887
commit 55eebde0ba
55 files changed
+7353 -7

No files matched your search

+99
View File
@@ -0,0 +1,99 @@
/**
* 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();