trello_fake/scripts/diagnose.js

176 lines
5.7 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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