RF62: Administrador actualiza curso
Descripción
Como administrador, quiero actualizar la información de un curso (título, descripción, categoría, nivel, lecciones, estado de publicación) para mantener el catálogo correcto y actualizado.
Operación restringida por RBAC (rol admin). Las validaciones de contenido son las mismas que al crear (RF60).
| Campo | Valor |
|---|---|
| Módulo | Courses Module (administración) |
| Actor | Administrador (rol admin) |
| Endpoint | PUT /admin/courses/:id |
| Precondiciones | Sesión activa con rol admin; el curso existe |
| Prioridad | Baja (post-MVP) |
| Etapa | MBI 1 |
| Requisitos relacionados | RF60, RF61 |
Reglas de negocio
- RN-62.1 — Solo el rol
admin(validado en backend) puede actualizar cursos. - RN-62.2 — Cambiar el estado a "publicado" exige que el curso tenga los campos obligatorios completos (título, descripción, al menos una lección).
- RN-62.3 — Reemplazar videos sube los nuevos a S3 privado y actualiza referencias; los anteriores se archivan/eliminan según política.
- RN-62.4 — Los cambios se registran en auditoría.
- RN-62.5 — Actualizar un curso no afecta retroactivamente los certificados ya emitidos.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
id | Obligatorio. Curso existente. | "Curso no encontrado." (404) |
title | Si se envía: 3–120 caracteres. | "El título no es válido." |
category/level | Valores de catálogo. | "Categoría/nivel no válido." |
status | Enum (draft, published, archived). | "Estado no válido." |
| Rol | Debe ser admin. | "No tienes permisos para esta acción." (403) |
Entrada sanitizada y consultas parametrizadas; no se aceptan inyecciones SQL. Archivos validados por tipo y tamaño.
Criterios de aceptación
Escenario 1: Actualización exitosa
Dado que soy administrador y envío cambios válidos,
Cuando guardo,
Entonces el sistema actualiza el curso,
Y responde 200 OK,
Y registra el cambio en auditoría.
Escenario 2: Publicar curso incompleto
Dado que intento publicar un curso sin campos obligatorios,
Cuando cambio su estado a "publicado",
Entonces el sistema responde 400 indicando los campos faltantes.
Escenario 3: Usuario sin rol admin (seguridad)
Dado que no tengo rol admin,
Cuando intento actualizar un curso,
Entonces el sistema responde 403 Forbidden.
Escenario 4: Datos inválidos o maliciosos
Dado que envío campos fuera de catálogo o con inyección SQL,
Cuando el backend valida,
Entonces rechaza la entrada (400) y no la ejecuta.
Criterios no funcionales
- RBAC en backend; auditoría obligatoria.
- Reemplazo de archivos a S3 privado; comunicación TLS 1.2+.