Cada vez que un incidente cambia (creado, editado, asignado, cambio de estado, eliminado, reabierto), las pantallas abiertas de las personas que lo pueden ver se enteran en un instante. El mensaje solo dice “este incidente cambió y cómo”; los datos se piden a la API, que aplica los permisos de quien pregunta.
Paso a paso
- Quien cambiaGuarda un cambio en un incidente
Su pestaña envía
X-Socket-IDen cada petición, para no avisarse a sí misma. - APIConfirma la transacción y emite IncidentChanged
El evento sale solo después del commit (
ShouldDispatchAfterCommit): si la transacción falla, nadie recibe un aviso falso. Lleva el ULID, el tipo de cambio, quien lo creó y el asignado antes y después. - APICalcula los canales
El general; el de sin asignar si lo estaba antes o lo está ahora; y el personal de quien lo creó, de quien lo tenía y de quien lo tiene.
- ColaEnvía el mensaje por la cola
incident.changedcon{id, change}, a todos menos a la pestaña que hizo el cambio (toOthers). - ReverbLo entrega a los suscritos
- API¿Quedó asignado a otra persona?
Si quien cambió se lo tomó a sí mismo, no hay aviso extra.
- Quien miraRecibe "Te asignaron TZ-26-0142"
Por su canal personal (
incident.assigned), con enlace al incidente. El título se pide a la API. - Quien mira¿Qué pantalla tiene abierta?
- Quien mira"Hay N incidentes con cambios · Actualizar"
No mueve las filas mientras la persona lee; actualiza cuando ella quiere.
- Quien miraEl detalle se actualiza solo
Con su historial. Si ya no lo puede ver, la API responde 404 y la pantalla lo quita. Un formulario de edición abierto avisa sin borrar el borrador.
- Quien miraLas cifras se refrescan
Como máximo una vez cada 10 s, y nunca mientras se personaliza.
Dónde está en el código
EloquentIncidentRepositoryeIncidentChanged: el evento tras el commit.BroadcastIncidentChangeyChannels(forIncident).realtimeBusyuseRealtimeNotices.socketId.ts: la cabeceraX-Socket-ID.- Explicación: Módulo Realtime.