trello_fake/scripts/diagnose.js

176 lines
5.7 KiB
JavaScript
Raw Permalink Normal View History

#!/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 <container> # 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);
});