feat: log de errores para el admin (backend + frontend)
Panel nuevo en Configuracion ("Errores del sistema", solo superadmin): errores de backend
(excepciones 500 no manejadas, con stack/ruta/metodo/usuario) y de frontend (errores JS y
promesas sin catch en el navegador del usuario, antes invisibles para cualquiera mas alla de esa
persona). Filtro por origen, boton para limpiar el historial.
Error Boundary de React: si algo rompe el render, ya no queda pantalla en blanco -- aviso simple
con boton de recargar, y el error queda reportado igual.
Nuevo error_logs (tabla, se recorta sola a 1000 filas) + GET/DELETE /api/error-logs (superadmin)
+ POST /api/error-logs (publico, rate-limited, para reportar incluso sin sesion).
Probado de punta a punta en dev: error real de backend (500) capturado con stack completo y
usuario correcto, error JS global y promesa rechazada capturados desde el navegador, panel
muestra ambos y el boton de limpiar funciona. Se encontro y corrigio un bug real en el camino: la
identificacion de usuario opcional leia jwt.payload.id en vez de .sub (como realmente lo firma
auth/service.js), asi que nunca identificaba a nadie.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
| `attachments` | archivos adjuntos a proyecto o actividad |
|
||||
| `notifications` | notificaciones in-app por usuario |
|
||||
| `audit_log` | auditoría central (quién, qué, sobre qué, cuándo) |
|
||||
| `error_logs` | errores de backend (excepciones 500) y frontend (JS/promesas sin catch), panel "Errores del sistema" en Configuración |
|
||||
|
||||
## Relaciones clave
|
||||
|
||||
@@ -102,6 +103,9 @@
|
||||
además sea `project_lead` global, comportamiento previo sin cambios).
|
||||
- Empresa asumida única (no hay tabla `companies` en el MVP).
|
||||
- Producción siempre usa `192.168.222.32`. Desarrollo siempre usa `192.168.222.20`. No mezclar.
|
||||
- `error_logs`: sin límite de tiempo, pero se recorta solo a los 1000 registros más recientes en
|
||||
cada inserción (evita crecimiento sin control si algo entra en loop de errores). Se puede vaciar
|
||||
del todo desde el panel ("Limpiar registro").
|
||||
|
||||
## Riesgos o decisiones
|
||||
|
||||
|
||||
Reference in New Issue
Block a user