Este repositorio es parte del backend de la aplicacion class-connect, para conocer informacion mas general sobre el proyecto visita el siguiente link Organization Homepage.
Este microservicio es el nucleo de la aplicacion y se ocupa de todas las operaciones relacionadas con cursos, incluyendo el manejo de inscripciones, examenes, tareas, modulos organizables por los profesores, estadisticas por curso, entre otras.
Los endpoints de este microservicio se pueden encontrar en el swagger del mismo (o alternativamente en la carpeta docs/),
los mismos son:
GET/swagger/index.html (Documentacion de la API)
-
GET/ (Listar cursos con filtros aplicables) -
POST/ (Agregar curso) -
GET/aux/logs/{id} (Obtener registros del profesor auxiliar) -
PUT/aux/{id}/{professor_id} (Agregar o eliminar profesor auxiliar) -
PUT/picture/{id} (Agregar imagen al curso) -
DELETE/picture/{id} (Eliminar imagen del curso) -
GET/session (Listar cursos de la sesión) -
PATCH/status/{id} (Cambiar estado del curso) -
GET/students/{id} (Obtener información del estudiante) -
GET/{id} (Obtener curso por ID) -
DELETE/{id} (Eliminar curso) -
PATCH/{id} (Actualizar curso)
GET/enrollments/{id} (Inscribir estudiante)DELETE/enrollments/{id}/{student_id} (Desinscribir estudiante)
-
PUT/modules/attachment/{id} (Agregar archivo adjunto a un módulo) -
DELETE/modules/attachment/{id}/{attachment_pos} (Eliminar archivo adjunto de un módulo) -
GET/modules/{id} (Obtener módulos por curso) -
PUT/modules/{id} (Organizar posiciones de módulos) -
POST/modules/{id} (Crear un módulo nuevo) -
DELETE/modules/{id} (Eliminar un módulo) -
PATCH/modules/{id} (Modificar un módulo existente)
-
GET/assignments (Listar tareas de la sesión actual) -
PUT/assignments/attachment/{id} (Agregar archivo adjunto a la tarea) -
DELETE/assignments/attachment/{id}/{attachment_pos} (Eliminar archivo adjunto de la tarea) -
GET/assignments/course/{id} (Listar tareas por curso) -
GET/assignments/{id} (Obtener tarea por ID) -
POST/assignments/{id} (Crear tarea) -
DELETE/assignments/{id} (Eliminar tarea) -
PATCH/assignments/{id} (Actualizar tarea)
-
POST/assignments/submission/review/{id} (Revisar entrega de tarea) -
GET/assignments/submission/states/{id} (Obtener estados de la tarea por ID) -
GET/assignments/submission/{id} (Obtener entrega de tarea por ID) -
POST/assignments/submission/{id} (Enviar entrega de tarea)
-
GET/exams (Obtener exámenes de la sesión) -
GET/exams/course/{id} (Obtener exámenes por curso) -
GET/exams/{id} (Obtener examen por ID) -
POST/exams/{id} (Crear examen) -
DELETE/exams/{id} (Eliminar examen) -
PATCH/exams/{id} (Modificar examen)
-
POST/exams/submission/review/{id} (Revisar entrega de examen) -
GET/exams/submission/states/{id} (Obtener estados del examen por ID) -
GET/exams/submission/{id} (Obtener entrega de examen por ID) -
POST/exams/submission/{id} (Enviar entrega de examen)
GET/stats/{id} (Obtener estadísticas del curso)GET/stats/{id}/{student_id} (Obtener estadísticas de un estudiante)
Se utiliza la arquitectura package by layer, donde los controladores se pueden encontrar en la carpeta handlers, los servicios en services y los repositorios en repository.
Para cada grupo de rutas hay una interfaz para el Handler y otra para el Service.
En la carpeta models se encuentran las representaciones en estructura de datos de cada tabla en la base de datos. A su vez en la carpeta dto se encuentran las representaciones de datos que se envian al cliente y se reciven del mismo.
Todos los cambios a la base de datos estan registrados en la carpeta migrations, donde cada
migracion tiene su up.sql (accion creativa) y down.sql (accion desctructiva).
Para correr el microservicio en un entorno de desarrollo local (con base de datos local incluida), se puede utilizar el siguiente comando:
docker compose -f local-dev-compose.yml up --buildPara crear una migracion para cambiar tablas/entradas de la base de datos, se utiliza el comando go-migrate de la siguiente manera:
# Instalar go-migrate si no se tiene instalado
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
# Crear una migracion nueva (alternativamente, crear archivos manualmente con el nombre deseado)
migrate create -ext sql -dir ./migrations -seq migration_name- Se hace feature branching desde la rama dev.
- Una vez listo para integrar se realiza PR a dev, donde corre el pipeline de testing y coverage.
- Una vez esta listo para desplegar se realiza PR a main, se vuelven a correr pipelines de calidad de codigo.
- Cuando se hace el push a main se ejecuta el pipeline de continous delivery, construye la imagen y la desplega a k8s.