RF52: Usuario accede al curso
Descripción
Como usuario autenticado, quiero abrir un curso y ver su contenido (lecciones, progreso) para comenzar o continuar mi aprendizaje.
Al acceder se valida el derecho de acceso (cursos premium requieren plan premium) y se devuelve el temario con el progreso del usuario. El contenido de video se entrega al reproducir cada lección (RF53).
| Campo | Valor |
|---|---|
| Módulo | Courses Module |
| Actor | Usuario autenticado |
| Endpoint | GET /courses/:id |
| Precondiciones | Sesión activa; el curso existe y está publicado |
| Prioridad | Media (MVP) |
| Etapa | MBI 1 |
| Requisitos relacionados | RF47, RF53, RF57 |
Reglas de negocio
- RN-52.1 — Si el curso es premium y el usuario está en Free, se bloquea el acceso al contenido con invitación a suscribirse.
- RN-52.2 — Al acceder por primera vez se registra la inscripción/inicio del curso para llevar el progreso.
- RN-52.3 — Se devuelve el temario con el estado de cada lección (no vista / en progreso / completada).
- RN-52.4 — El acceso se valida siempre en el backend (no se confía en el cliente).
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
id | Obligatorio. Curso publicado existente. | "Curso no encontrado." (404) |
Authorization | Bearer válido. | "Sesión no válida." (401) |
Criterios de aceptación
Escenario 1: Acceso exitoso
Dado que tengo derecho de acceso al curso,
Cuando lo abro,
Entonces el sistema registra/recupera mi progreso,
Y devuelve el temario con el estado de cada lección con 200 OK.
Escenario 2: Curso premium sin plan premium
Dado que el curso es premium y estoy en Free,
Cuando intento acceder al contenido,
Entonces el sistema responde 403 Forbidden,
Y muestra una invitación a suscribirse (RF33).
Escenario 3: Curso inexistente
Dado que envío un id que no existe o no está publicado,
Cuando intento acceder,
Entonces el sistema responde 404 Not Found.
Escenario 4: Validación de acceso en backend (seguridad)
Dado que se manipula el cliente para saltar la validación, Cuando se solicita el contenido, Entonces el backend valida el derecho de acceso y bloquea si no corresponde.
Criterios no funcionales
- Respuesta < 1.5 s.
- El contenido de video no se entrega aquí, solo el temario.
- Comunicación TLS 1.2+.