diff --git a/frontend/start.sh b/frontend/start.sh index e5eeef6..adc9a17 100644 --- a/frontend/start.sh +++ b/frontend/start.sh @@ -1,65 +1,52 @@ #!/bin/sh -set -e +# REMOVIDO set -e para o script não morrer antes de nos mostrar o erro -echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO (v2) ---" +echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO (v3) ---" -# Extrai os dados da URL usando Node (muito mais seguro que sed) +# Extrai os dados da URL usando Node export DB_HOST=$(node -e "try { const u = new URL(process.env.DATABASE_URL); console.log(u.hostname); } catch(e) { console.log('error'); }") export DB_PORT=$(node -e "try { const u = new URL(process.env.DATABASE_URL); console.log(u.port || '5432'); } catch(e) { console.log('5432'); }") -if [ "$DB_HOST" = "error" ]; then - echo "❌ ERRO: A DATABASE_URL está em um formato inválido!" - exit 1 -fi +echo "📡 Host: $DB_HOST | Porta: $DB_PORT" -echo "📡 Tentando contato com: $DB_HOST na porta $DB_PORT" - -# Teste de porta usando Node -node -e " -const net = require('net'); -const client = net.createConnection({ host: '$DB_HOST', port: parseInt('$DB_PORT') }, () => { - console.log('✅ REDE OK: A porta $DB_PORT está aberta!'); - process.exit(0); -}); -client.on('error', (err) => { - console.log('❌ FALHA DE REDE: Porta fechada ou host inacessível: ' + err.message); - process.exit(1); -}); -setTimeout(() => { process.exit(1); }, 3000); -" || echo "⚠️ Aguardando rede estabilizar..." - -# Função de espera +# Função de espera com exibição de erro real wait_for_db() { echo "⏳ Validando login no banco..." - max_retries=15 + max_retries=10 count=0 - while true; do + while [ $count -lt $max_retries ]; do count=$((count + 1)) echo "🔄 Tentativa $count/$max_retries..." - # Tenta o dry-run do prisma - PRISMA_ERR=$(./node_modules/.bin/prisma db push --dry-run 2>&1) - if [ $? -eq 0 ]; then - echo "✅ SUCESSO: Banco conectado e autenticado!" - break + # Roda o Prisma e captura TUDO o que ele disser + PRISMA_OUTPUT=$(./node_modules/.bin/prisma db push --dry-run 2>&1) + EXIT_CODE=$? + + if [ $EXIT_CODE -eq 0 ]; then + echo "✅ SUCESSO: Autenticado com sucesso!" + return 0 fi - echo "❌ FALHA: O Prisma disse:" - echo "$PRISMA_ERR" | grep -E "P1001|P1002|P1003|P1010|Authentication|denied|Database" || echo "Erro desconhecido (verificar logs)" + echo "❌ ERRO DETECTADO PELO PRISMA:" + echo "----------------------------------------------------------------" + echo "$PRISMA_OUTPUT" + echo "----------------------------------------------------------------" - if [ $count -gt $max_retries ]; then - echo "❌ Desistindo." - exit 1 - fi - sleep 4 + echo "😴 Aguardando 5s..." + sleep 5 done + return 1 } if [ -n "$DATABASE_URL" ]; then - wait_for_db - echo "🔄 Sincronizando tabelas..." - ./node_modules/.bin/prisma db push --accept-data-loss - ./node_modules/.bin/prisma db seed || echo "⚠️ Seed já configurado." + if wait_for_db; then + echo "🔄 Sincronizando tabelas..." + ./node_modules/.bin/prisma db push --accept-data-loss + ./node_modules/.bin/prisma db seed || echo "⚠️ Seed ja existia." + else + echo "❌ FALHA CRÍTICA: Não foi possível conectar após várias tentativas." + exit 1 + fi fi echo "🚀 Iniciando aplicação..."