Saltar al contenido principal

RF60: Administrador agrega curso

Descripción

Como administrador, quiero crear un curso nuevo (metadatos + lecciones/videos) para ampliar el catálogo de educación financiera de Finnova.

Operación restringida por control de acceso por roles (RBAC): solo el rol admin puede ejecutarla (Compliance §5.1 — RBAC). Los metadatos se guardan en Finnova DB y los videos se suben al bucket privado de S3 (Courses Database, SSE-S3, sin acceso público — Cifrado §4.3).

CampoValor
MóduloCourses Module (administración)
ActorAdministrador (rol admin)
EndpointPOST /admin/courses (+ carga de videos)
PrecondicionesSesión activa con rol admin
PrioridadBaja (post-MVP)
EtapaMBI 1
Requisitos relacionadosRF61, RF62, RF47

Reglas de negocio

  • RN-60.1 — Solo el rol admin (validado en el backend, no en el cliente) puede crear cursos.
  • RN-60.2 — Un curso se crea inicialmente como borrador (draft); solo se publica cuando tiene los campos obligatorios y al menos una lección.
  • RN-60.3 — Los videos se suben a S3 privado; no se exponen públicamente (se sirven por URL prefirmada al reproducir, RF53).
  • RN-60.4 — La creación se registra en el log de auditoría.

Validaciones de entrada

CampoReglasMensaje de error
titleObligatorio. 3–120 caracteres."El título no es válido."
descriptionObligatorio. 10–2000 caracteres."La descripción no es válida."
categoryObligatorio. Valor de catálogo."Selecciona una categoría válida."
levelObligatorio. Enum (basic, intermediate, advanced)."Nivel no válido."
videosFormato permitido (MP4). Tamaño máx. por archivo definido."Sube un video válido dentro del tamaño permitido."
RolDebe ser admin."No tienes permisos para esta acción." (403)

Entrada sanitizada y consultas parametrizadas; no se aceptan inyecciones SQL. Los archivos se validan por tipo MIME real y tamaño.

Criterios de aceptación

Escenario 1: Creación de curso exitosa

Dado que soy administrador y envío metadatos válidos, Cuando creo el curso, Entonces el sistema lo guarda como borrador, Y sube los videos a S3 privado, Y responde 201 Created, Y registra el evento en auditoría.

Escenario 2: Campos obligatorios faltantes o inválidos

Dado que dejo campos obligatorios vacíos o con formato inválido, Cuando intento crear, Entonces el sistema responde 400 con el mensaje del campo afectado.

Escenario 3: Usuario sin rol admin (seguridad)

Dado que no tengo rol admin, Cuando intento crear un curso, Entonces el sistema responde 403 Forbidden, Y registra el intento.

Escenario 4: Archivo de video inválido

Dado que subo un archivo no permitido o demasiado grande, Cuando intento crear el curso, Entonces el sistema responde 400 con "Sube un video válido dentro del tamaño permitido".

Criterios no funcionales

  • RBAC validado en backend; auditoría obligatoria.
  • Videos en S3 privado con SSE-S3; subida en segundo plano.
  • Comunicación TLS 1.2+.

Diagrama de secuencia