RF55: Usuario retrocede video
Descripción
Como usuario reproduciendo una lección, quiero retroceder el video (saltar hacia atrás) para repasar una parte que no entendí.
Análogo a RF54, es una interacción del reproductor (seek hacia atrás) sobre el stream autorizado (RF53); la posición se persiste para conservar el progreso.
| Campo | Valor |
|---|---|
| Módulo | Courses Module (cliente de reproducción + persistencia de progreso) |
| Actor | Usuario autenticado |
| Endpoint | PATCH /courses/:id/lessons/:lessonId/progress ({ positionSeconds }) |
| Precondiciones | Lección en reproducción con acceso válido |
| Prioridad | Baja (MVP) |
| Etapa | MBI 1 |
| Requisitos relacionados | RF53, RF54 |
Reglas de negocio
- RN-55.1 — El
seekatrás ocurre en el reproductor; la posición mínima es 0 (inicio de la lección). - RN-55.2 — El progreso se guarda con throttling.
- RN-55.3 — Retroceder no reduce el porcentaje "máximo visto" registrado para fines de finalización (RF57).
- RN-55.4 — Si la URL prefirmada expiró, se solicita una nueva (RF53) de forma transparente.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
positionSeconds | Numérico ≥ 0 y ≤ duración. | "Posición de reproducción no válida." |
Authorization | Bearer válido. | "Sesión no válida." (401) |
Criterios de aceptación
Escenario 1: Retroceder exitoso
Dado que estoy reproduciendo una lección, Cuando retrocedo a una posición válida, Entonces el reproductor salta a esa posición, Y la posición actual se guarda sin reducir el máximo visto.
Escenario 2: Retroceder antes del inicio
Dado que intento retroceder antes del segundo 0, Cuando lo hago, Entonces la posición se limita al inicio (0).
Escenario 3: URL expirada durante la sesión
Dado que la URL prefirmada expiró, Cuando retrocedo y reanudo, Entonces el sistema solicita una nueva URL (RF53) y continúa.
Criterios no funcionales
- Guardado con throttling; respuesta < 300 ms.
- Comunicación TLS 1.2+.