sequenceDiagram
autonumber
participant M as Monitor
participant FE as Frontend React
participant API as API Node/Express
participant DB as Base de Datos MySQL
participant ADM as Administrador
rect rgb(227, 242, 253)
Note over M, DB: FASE 1 - Autenticacion del Monitor
M ->> FE : Ingresa cedula y contrasena
FE ->> API : POST /auth/login
API ->> DB : SELECT usuario WHERE cedula
DB -->> API : Usuario id, nombre, rol
API ->> API : bcrypt.compare password
alt Credenciales validas
API -->> FE : 200 OK - JWT token, rol MONITOR
FE -->> M : Redirige a Dashboard
else Credenciales invalidas
API -->> FE : 401 Unauthorized
FE -->> M : Muestra error de autenticacion
end
end
rect rgb(232, 245, 233)
Note over M, DB: FASE 2 - Consulta de Horario Asignado
M ->> FE : Navega a Mis Horarios
FE ->> API : GET /asignaciones/mias Bearer JWT
API ->> DB : SELECT asignaciones JOIN horarios WHERE id_monitor
DB -->> API : Lista de asignaciones con horario y sala
API -->> FE : 200 OK lista sala, dia, horaInicio, horaFin
FE -->> M : Muestra tabla con horario semanal
end
rect rgb(243, 229, 245)
Note over M, DB: FASE 3 - Registrar Solicitud de Cambio
M ->> FE : Selecciona turno a intercambiar
M ->> FE : Escoge monitor reemplazante y confirma
FE ->> API : POST /solicitudes id_horario, id_reemplazante
API ->> DB : SELECT usuario WHERE id reemplazante AND rol MONITOR
alt Reemplazante existe
API ->> DB : INSERT SolicitudCambio estado PENDIENTE
DB -->> API : SolicitudCambio creada con id
API -->> FE : 201 Created - estado PENDIENTE
FE -->> M : Solicitud enviada, estado Pendiente
else Reemplazante no encontrado
API -->> FE : 404 Not Found
FE -->> M : Monitor reemplazante no existe
end
end
rect rgb(255, 243, 224)
Note over ADM, DB: FASE 4 - Revision por el Administrador
ADM ->> FE : Navega a Solicitudes de Cambio
FE ->> API : GET /solicitudes?estado=PENDIENTE Bearer JWT
API ->> DB : SELECT FROM solicitudes WHERE estado PENDIENTE
DB -->> API : Lista de solicitudes pendientes
API -->> FE : 200 OK lista id, solicitante, reemplazante, horario
FE -->> ADM : Muestra lista de solicitudes pendientes
ADM ->> FE : Selecciona solicitud y decide
alt Aprobar solicitud
FE ->> API : PATCH /solicitudes/id estado APROBADA
API ->> DB : UPDATE solicitudes SET estado APROBADA
DB -->> API : 1 row updated
API -->> FE : 200 OK estado APROBADA
FE -->> ADM : Solicitud aprobada exitosamente
else Rechazar solicitud
FE ->> API : PATCH /solicitudes/id estado RECHAZADA
API ->> DB : UPDATE solicitudes SET estado RECHAZADA
DB -->> API : 1 row updated
API -->> FE : 200 OK estado RECHAZADA
FE -->> ADM : Solicitud rechazada
end
end
rect rgb(252, 228, 236)
Note over M, DB: FASE 5 - Monitor Consulta Estado Final
M ->> FE : Navega a Mis Solicitudes
FE ->> API : GET /solicitudes/mias Bearer JWT
API ->> DB : SELECT FROM solicitudes WHERE id_solicitante
DB -->> API : Lista con estados actualizados
API -->> FE : 200 OK lista id, estado APROBADA o RECHAZADA
FE -->> M : Muestra estado final de su solicitud
end