RF53: Usuario reproduce video
Descripción
Como usuario autenticado con acceso al curso, quiero reproducir el video de una lección para consumir el contenido del curso.
El video se almacena en el bucket privado de S3 (Courses Database, SSE-S3). El backend valida el acceso y entrega una URL prefirmada de corta expiración (p. ej. 15 min) para el streaming; el contenido nunca es público (Cifrado §4.3).
| Campo | Valor |
|---|---|
| Módulo | Courses Module |
| Actor | Usuario autenticado |
| Endpoint | GET /courses/:id/lessons/:lessonId/stream |
| Precondiciones | Sesión activa; derecho de acceso al curso (RF52) |
| Prioridad | Media (MVP) |
| Etapa | MBI 1 |
| Requisitos relacionados | RF52, RF54, RF55, RF57 |
Reglas de negocio
- RN-53.1 — El backend valida el derecho de acceso antes de emitir la URL prefirmada.
- RN-53.2 — La URL prefirmada expira en minutos; el bucket bloquea todo acceso público.
- RN-53.3 — Se registra el progreso de reproducción (posición/última lección vista).
- RN-53.4 — Si el usuario pierde el acceso (p. ej. se degrada a Free en un curso premium), se deja de emitir URLs.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
id, lessonId | Obligatorios. Existentes y del curso. | "Lección no encontrada." (404) |
Authorization | Bearer válido. | "Sesión no válida." (401) |
Criterios de aceptación
Escenario 1: Reproducción exitosa
Dado que tengo acceso al curso, Cuando abro una lección, Entonces el sistema valida el acceso y entrega una URL prefirmada, Y el video se reproduce, Y se registra mi progreso.
Escenario 2: Sin derecho de acceso
Dado que el curso es premium y ya no tengo plan premium,
Cuando intento reproducir,
Entonces el sistema responde 403 Forbidden y no entrega URL.
Escenario 3: Lección inexistente
Dado que la lección no existe en el curso,
Cuando intento reproducir,
Entonces el sistema responde 404 Not Found.
Escenario 4: Protección del contenido (seguridad)
Dado que se obtiene una URL prefirmada, Cuando expira, Entonces deja de dar acceso al archivo, Y el bucket nunca permite acceso público directo.
Criterios no funcionales
- Inicio de reproducción < 3 s; streaming adaptable si aplica.
- URL prefirmada con expiración corta; comunicación TLS 1.2+.