176 lines
5.7 KiB
JavaScript
176 lines
5.7 KiB
JavaScript
#!/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);
|
||
});
|