#!/usr/bin/env node /** * Script de diagnóstico para verificar que la aplicación esté funcionando correctamente */ const COLORS = { reset: '\x1b[0m', green: '\x1b[32m', red: '\x1b[31m', yellow: '\x1b[33m', blue: '\x1b[34m', cyan: '\x1b[36m', }; function log(color, symbol, message) { console.log(`${color}${symbol}${COLORS.reset} ${message}`); } async function checkDolibarr() { try { const response = await fetch('http://localhost:8200'); if (response.ok || response.status === 404) { log(COLORS.green, '✓', 'Dolibarr está accesible en http://localhost:8200'); return true; } log(COLORS.red, '✗', `Dolibarr respondió con status ${response.status}`); return false; } catch (error) { log(COLORS.red, '✗', 'Dolibarr NO está accesible en http://localhost:8200'); log(COLORS.yellow, '⚠', 'Asegúrate de que Docker esté corriendo: docker ps'); return false; } } async function checkNextJS() { try { const response = await fetch('http://localhost:3000'); if (response.ok || response.status === 404) { log(COLORS.green, '✓', 'Next.js está corriendo en http://localhost:3000'); return true; } log(COLORS.red, '✗', `Next.js respondió con status ${response.status}`); return false; } catch (error) { log(COLORS.red, '✗', 'Next.js NO está corriendo en http://localhost:3000'); log(COLORS.yellow, '⚠', 'Ejecuta: npm run dev'); return false; } } async function checkAPIRoute() { try { const response = await fetch('http://localhost:3000/api/dolibarr/projects'); if (response.ok) { const data = await response.json(); log(COLORS.green, '✓', `API Route funciona correctamente`); log(COLORS.cyan, 'ℹ', `Proyectos encontrados: ${data.length}`); return data.length; } const errorData = await response.json(); log(COLORS.red, '✗', `API Route falló: ${errorData.error}`); return 0; } catch (error) { log(COLORS.red, '✗', `Error en API Route: ${error.message}`); return 0; } } async function checkDolibarrAPI() { try { const API_URL = 'http://localhost:8200/api/index.php'; const API_KEY = process.env.NEXT_PUBLIC_DOLIBARR_API_KEY || 'Xzulu2Jbv1Ge4V1IVtXKe45db9W64WN7'; const response = await fetch(`${API_URL}/projects?DOLAPIKEY=${API_KEY}`); if (response.ok) { const data = await response.json(); log(COLORS.green, '✓', 'API de Dolibarr funciona correctamente'); log(COLORS.cyan, 'ℹ', `Proyectos en Dolibarr: ${data.length}`); if (data.length > 0) { const sample = data[0]; log(COLORS.blue, '→', `Ejemplo: ${sample.title} (${sample.ref})`); } return data.length; } log(COLORS.red, '✗', `API de Dolibarr falló con status ${response.status}`); return 0; } catch (error) { log(COLORS.red, '✗', `Error conectando a API de Dolibarr: ${error.message}`); return 0; } } async function main() { console.log('\n' + '═'.repeat(60)); console.log('🔍 DIAGNÓSTICO DEL SISTEMA'); console.log('═'.repeat(60) + '\n'); // 1. Verificar Dolibarr console.log('1️⃣ Verificando Dolibarr...'); const dolibarrOk = await checkDolibarr(); console.log(''); if (!dolibarrOk) { console.log('💡 Solución:'); console.log(' docker ps # Ver contenedores'); console.log(' docker start # Iniciar Dolibarr\n'); return; } // 2. Verificar Next.js console.log('2️⃣ Verificando Next.js...'); const nextOk = await checkNextJS(); console.log(''); if (!nextOk) { console.log('💡 Solución:'); console.log(' npm run dev\n'); return; } // 3. Verificar API de Dolibarr directa console.log('3️⃣ Verificando API de Dolibarr...'); const dolibarrProjectCount = await checkDolibarrAPI(); console.log(''); // 4. Verificar API Route console.log('4️⃣ Verificando API Route de Next.js...'); const apiRouteProjectCount = await checkAPIRoute(); console.log(''); // Resumen console.log('═'.repeat(60)); console.log('📊 RESUMEN'); console.log('═'.repeat(60)); if (dolibarrProjectCount === 0) { log(COLORS.yellow, '⚠', 'No hay proyectos en Dolibarr'); console.log('\n💡 Solución:'); console.log(' npm run seed # Crear proyectos de prueba\n'); } else if (apiRouteProjectCount === 0) { log(COLORS.red, '✗', 'Hay proyectos en Dolibarr pero no se pueden obtener via API Route'); console.log('\n💡 Posibles causas:'); console.log(' 1. Revisa las credenciales en .env.local'); console.log(' 2. Verifica que la API key sea correcta'); console.log(' 3. Mira los logs del servidor Next.js (terminal donde corre npm run dev)\n'); } else if (dolibarrProjectCount !== apiRouteProjectCount) { log(COLORS.yellow, '⚠', 'Discrepancia en el número de proyectos'); log(COLORS.cyan, 'ℹ', `Dolibarr: ${dolibarrProjectCount}, API Route: ${apiRouteProjectCount}`); } else { log(COLORS.green, '✓', 'Todo está funcionando correctamente!'); console.log(''); log(COLORS.cyan, '🎉', 'Abre http://localhost:3000 para ver tus proyectos'); console.log(''); } // Consejos adicionales if (apiRouteProjectCount > 0) { console.log('═'.repeat(60)); console.log('💡 CONSEJOS'); console.log('═'.repeat(60)); console.log('• Abre las DevTools del navegador (F12)'); console.log('• Ve a la pestaña Console'); console.log('• Busca errores en rojo'); console.log('• Ve a la pestaña Network > Fetch/XHR'); console.log('• Verifica que la petición a /api/dolibarr/projects retorne 200\n'); } } main().catch(error => { console.error('\n❌ Error fatal:', error.message); process.exit(1); });