[x] Detalles de HH.UU.
| Caso de uso | REQ-19 Como CAEQ quiero crear cursos con una capacidad definida para que los colegiados se inscriban y paguen su curso. |
|---|---|
| Actores | Usuario CAEQ |
| Tipo | MVP |
| Referencias | ‣ ‣ |
| Precondición | - Usuario de CAEQ en la pantalla de cursos. |
| Postcondición | - Nuevo curso creado. |
| Descripción | Un usuario CAEQ ingresa al formulario para crear un nuevo curso, donde sube una imagen para la portada, define los atributos del curso como su capacidad, descripción y los objetivos del curso. Cuando está satisfecho con el resultado crea el curso que ahora también es visible para los usuarios. |
| Resumen | Un administrador crea un nuevo curso de aprendizaje seleccionando sus atributos. |
@startuml
start
:Usuario selecciona un curso existente;
:Usuario ve los detalles del curso;
:Usuario selecciona "Modificar Curso";
:Sistema carga los detalles del curso en el formulario de modificación;
:Usuario modifica la información del curso;
if (Datos válidos) then (Sí)
:Sistema actualiza los datos del curso;
:Sistema muestra mensaje "Curso actualizado con éxito";
else (No)
:Sistema muestra mensaje de error "Datos inválidos";
endif
:Usuario cierra la ventana de modificación de curso;
stop
@enduml

T-REQ19 | Casos de prueba de creación de curso



@startuml
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
POST /courses
{
"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>"
}
{
"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
