Eliminar un incidente es un borrado lógico (deleted_at): desaparece del listado, del dashboard y del detalle para casi todos, pero la fila y su historial siguen ahí. Solo quien tiene incidents.restore puede verlo (filtro “Ver eliminados” del listado) y devolverlo.
Diagrama5 carriles · 12 pasos · 2 salidas de error
Paso a paso
- PersonaPulsa Eliminar y confirma
El botón aparece solo si la API lo permite (
actions.delete) y siempre pide confirmación. - NavegadorEnvía DELETE /incidents/{id}
- API¿Lo ve y tiene incidents.delete?
- Base de datosMarca deleted_at y anota "deleted"
En la misma transacción. Nada se borra de verdad; las FK del historial siguen válidas.
- Cola y avisosAvisa del cambio
Las pantallas abiertas de otras personas reciben
incident.changed; al volver a consultar reciben 404 y lo quitan. - NavegadorVuelve al listado
- PersonaAbre "Ver eliminados" y elige Restaurar
Solo con
incidents.restore. Pedir los eliminados sin ese permiso responde 403. - NavegadorEnvía POST /incidents/{id}/restore
- API¿Tiene incidents.restore y está eliminado?
- Base de datosQuita deleted_at y anota "restored"
- Cola y avisosAvisa del cambio
- NavegadorEl incidente vuelve con todo su historial
Qué ve la persona en cada error
| Código | HTTP | Cuándo | Mensaje en pantalla |
|---|---|---|---|
RESOURCE_NOT_FOUND | 404 | No existe, ya estaba eliminado o no lo puede ver | No encontramos lo que buscas. Puede que se haya eliminado o que no tengas acceso. |
FORBIDDEN_ACTION | 403 | Sin permiso de eliminar o de restaurar | No tienes permiso para hacer esta acción. Si crees que deberías tenerlo, habla con un administrador. |
INCIDENT_NOT_DELETED | 409 | Se intenta restaurar uno que no está eliminado | Este incidente no está eliminado, así que no hay nada que restaurar. |
Dónde está en el código
DeleteIncident:deleteyrestore.IncidentAccess: un eliminado solo lo ve quien puede restaurarlo.IncidentGate: solo restaurar busca entre los eliminados.ListIncidents: “Ver eliminados” exigeincidents.restore.- Explicación del módulo: Módulo Incidents.