[x] Detalles de HH.UU.
| Caso de uso | REQ-20 Como CAEQ quiero modificar cursos para que los colegiados se enteren de cualquier cambio en los detalles del curso o en los horarios. |
|---|---|
| Actores | Usuario CAEQ |
| Tipo | MVP |
| Referencias | ‣ |
| Precondición | - Usuario de CAEQ en la pantalla de cursos. |
| Postcondición | - Curso modificado. |
| Descripción | Un usuario CAEQ ingresa a la pantalla de detalles de un curso, donde selecciona modificar curso y es redirigido al formulario de modificar cursos. El usuario podría modificar la imagen de la portada, atributos del curso como su capacidad, descripción y los objetivos del curso. Cuando está satisfecho con el resultado modifica el curso que ahora también es visible para los usuarios. |
| Resumen | Un administrador modifica un curso de aprendizaje seleccionando sus nuevos atributos. |
@startuml
start
:Usuario selecciona "Crear Curso";
:Sistema muestra formulario de creación de curso;
:Usuario ingresa información del curso;
if (Datos válidos) then (Sí)
:Sistema sube la imagen de portada a firebase storage;
:Sistema crea un curso con el link de la imagen del curso;
:Sistema muestra mensaje "Curso creado con éxito";
else (No)
:Sistema muestra mensaje de error "Datos inválidos: (Datos que no se han agregado)";
endif
:Usuario cierra la ventana de creación de curso;
stop
@enduml

T-REQ20 | Casos de prueba de modificación de curso



@startuml Modificar curso
database "Mongo DB" {
folder "Courses" {
[courses]
}
}
node "Backend" {
folder "models" {
[course.model.js]
}
folder "controllers" {
[course.controller.js]
[files.controller.js]
}
folder "routes" {
[course.routes.js]
}
folder "Backend utils" {
[apiFeatures.js]
[catchAsync.js]
}
[App.js]
}
node "Frontend" {
folder "screens" {
folder "screens" {
[CreateOrUpdateCourse.js]
}
}
folder "components" {
folder "inputs" {
[TextInput.js]
[NumberInput.js]
[FileInput.js]
}
folder "cards" {
[CourseCard.js]
}
folder "buttons" {
[BaseButton.js]
}
}
folder "client" {
folder "Course" {
[Course.POST.js]
[Course.PATCH.js]
}
}
folder "utils" {
[alertHandler.js]
}
}
[CreateOrUpdateCourse.js] --> [Course.POST.js]
[CreateOrUpdateCourse.js] --> [Course.PATCH.js]
[CreateOrUpdateCourse.js] --> [BaseButton.js]
[CreateOrUpdateCourse.js] --> [TextInput.js]
[CreateOrUpdateCourse.js] --> [FileInput.js]
[CreateOrUpdateCourse.js] --> [CourseCard.js]
[CreateOrUpdateCourse.js] --> [NumberInput.js]
[CreateOrUpdateCourse.js] --> [alertHandler.js]
[Course.POST.js] --> [course.routes.js]
[Course.PATCH.js] --> [course.routes.js]
[course.routes.js] --> [course.controller.js]
[course.routes.js] --> [files.controller.js]
[course.controller.js] --> [apiFeatures.js]
[course.controller.js] --> [catchAsync.js]
[course.controller.js] --> [course.model.js]
[course.model.js] --> [Mongo DB]
@enduml

[x] Diseño de la API
PATCH /courses/:id
{
"courseName": "Curso de Programación en JavaScript",
"modality": "Remoto",
"price": 200,
"teacherName": "John Doe",
"teacherReview": "Experto en JavaScript con 5 años de experiencia.",
"imageUrl": "<https://example.com/course-image.jpg>"
}
{
"status": "success",
"data": {
"document" : {
"courseName": "Curso de Programación en JavaScript",
"modality": "Remoto",
"pricing": "Pagado",
"capacity": 30,
"numberHours": 40,
"startDate": "2023-10-15",
"endDate": "2023-11-25",
"description": "Un curso completo de programación en JavaScript para principiantes.",
"objective": "Aprender los fundamentos de JavaScript y construir aplicaciones web simples.",
"schedule": "Lunes y Miércoles de 18:00 a 20:00",
"daysOfSession": "Lunes y Miércoles",
"temario": "Introducción a JavaScript, Variables, Funciones, DOM, etc.",
"includes": "Material de estudio, acceso a la plataforma en línea.",
"place": "Virtual",
"price": 200,
"teacherName": "John Doe",
"teacherReview": "Experto en JavaScript con 5 años de experiencia.",
"paymentInfo": "Realizar el pago en línea antes de comenzar el curso.",
"imageUrl": "<https://example.com/course-image.jpg>"
}
}
}
Modelo relacional usado en este requisito
