Saltar al contenido principal

RF57: Usuario finaliza curso

Descripción

Como usuario que completó las lecciones y aprobó la evaluación, quiero finalizar el curso para marcarlo como completado y obtener mi certificado.

El sistema valida que se cumplan las condiciones de finalización (lecciones vistas + evaluación aprobada) y marca el curso como completado, lo que dispara la generación del certificado (RF59) y puede otorgar una recompensa (RF67).

CampoValor
MóduloCourses Module
ActorUsuario autenticado
EndpointPOST /courses/:id/complete
PrecondicionesSesión activa; lecciones requeridas vistas; evaluación aprobada (RF56)
PrioridadMedia (MVP)
EtapaMBI 1
Requisitos relacionadosRF56, RF58, RF59, RF67

Reglas de negocio

  • RN-57.1 — El curso solo se finaliza si se cumplen las condiciones (lecciones completas + evaluación aprobada); se validan en el backend.
  • RN-57.2 — Finalizar es idempotente: un curso ya completado no se re-completa ni duplica certificado/recompensa.
  • RN-57.3 — La finalización dispara la generación del certificado (RF59) y la evaluación de recompensa (RF67).
  • RN-57.4 — Se registra la fecha de finalización.

Validaciones de entrada

CampoReglasMensaje de error
idObligatorio. Curso al que el usuario tiene acceso."Curso no encontrado." (404)
EstadoCondiciones de finalización cumplidas."Aún no completas todas las lecciones o la evaluación." (409)

Criterios de aceptación

Escenario 1: Finalización exitosa

Dado que vi todas las lecciones y aprobé la evaluación, Cuando finalizo el curso, Entonces el sistema lo marca como completado, Y dispara la generación del certificado (RF59), Y evalúa otorgar una recompensa (RF67), Y responde 200 OK.

Escenario 2: Condiciones no cumplidas

Dado que me faltan lecciones o no aprobé la evaluación, Cuando intento finalizar, Entonces el sistema responde 409 con "Aún no completas todas las lecciones o la evaluación".

Escenario 3: Curso ya finalizado (idempotencia)

Dado que el curso ya está completado, Cuando intento finalizarlo de nuevo, Entonces el sistema responde 200 OK sin duplicar certificado ni recompensa.

Criterios no funcionales

  • Validación de condiciones en backend; respuesta < 1 s.
  • Generación de certificado y recompensa de forma asíncrona.
  • Comunicación TLS 1.2+.

Diagrama de secuencia