eeg_certs/backend
2023-12-05 15:39:43 -05:00
..
.vscode [BE][Certs] Connect to DB. Get person from DB or fake SUNAT API 2023-08-29 16:04:47 -05:00
sql [BE] Search ESCANEOS directory for scans & get info from qr codes 2023-11-13 16:59:37 -05:00
src [BE][Scans] Fixes #35. Rename file when there's an error detecting a QR 2023-12-05 15:39:43 -05:00
.env.example [FE][Scans] Fixes #24 2023-11-22 09:37:36 -05:00
.gitignore jenkins 2 2023-11-04 10:07:53 -05:00
Cargo.lock [BE][Scans] Apply thresholding before trying to detect QR codes 2023-11-21 14:53:43 -05:00
Cargo.toml [BE][Scans] Apply thresholding before trying to detect QR codes 2023-11-21 14:53:43 -05:00
README.md [BE] Add comments 2023-11-21 17:04:13 -05:00

eeg-system: Backend

Programa escrito en Rust que contiene toda la lógica de negocios. Expose únicamente rutas bajo /api/, todas se comunican mediante JSON.

Contiene el Modelo y Controlador de MVC. La vista está en la carpeta frontend.

Lanzamiento

Para lanzar se requiere lo siguiente en el entorno:

  • Sistema operativo Linux (no se desarrolló ni se probó el programa en windows/mac/bsd)
  • Libreria Imagemagick instalada y accesible mediante el binario convert, capaz de convertir archivos a PDF (en *buntu puede haber problemas de conversión, ver link en StackOverflow)
  • Una carpeta ESCANEOS accesible, con permisos de lectura y escritura para el usuario que ejecuta el backend. La ruta de esta carpeta está definida en /src/controller/scans/mod.rs, en la variable SCAN_PATH
  • Un archivo .env con las variables de entorno necesarias. Los nombres de las claves están en el archivo .env.example de este repositorio

Lanzamiento mediante Jenkins

Si se quiere lanzar mediante Jenkins ya hay un Jenkinsfile una carpeta arriba. Modificar lo que sea necesario para ejecutar en el entorno objetivo.

Funcionamiento

Básicamente, al iniciar el backend realiza lo siguiente:

  • Cargar variables de entorno
  • Inicializar el logger
  • Conectar a la base de datos y crear un pool de conexiones
  • Inicializar las rutas

Luego, las rutas brindan la siguiente funcionalidad:

  • Buscar y crear personas
  • CRUD de certificados
  • Crear y gestionar accesos a aula virtual
  • Automatizar escaneo de certificados

Componentes del sistema

controller

Los controladores, definen las rutas, reciben y envían datos al frontend

model

Contiene todas las operaciones referentes a la base de datos.

El SQL se escribe manualmente, se usa la librería sqlx.

Sqxl brinda los sig. beneficios:

  • Verificar tipos de datos correctos
  • Verificar las consultas SQL
  • Si hay algún problema en los tipos de datos o las consultas SQL, sqlx lanzará errores de compilación. De este modo no es posible lanzar el backend si hay errores en el SQL.

Por estas razones no se usa un ORM (se intento SeaORM, es demasiado complicado y no brinda ningún beneficio importante frente a sqlx).

online_classroom

Contiene código que realiza scrapping del aula virtual de EEGSAC.

Componentes dentro de controller

classroom

Operaciones respecto al aula virtual. Se comunica con el aula virtual mediante scrapping.

course

Devuelve una lista con todos los cursos del sistema

custom_label

Devuelve una lista con las denominaciones de los certificados de maquinarias.

person

CRUD de personas. La operación más importante es buscar una persona por DNI: Busca en la base de datos, si no encuentra busca en API de RENIEC.

register

CRUD de certificados.

scans

Automatiza el escaneo de certificados. Realiza lo siguiente:

  • Lee los archivos de la carpeta ESCANEOS de forma no recursiva.
  • Cambia de nombre los archivos a eeg_<unix timestamp>.jpg. Esto se hace para que solo 1 persona pueda escanear a la vez.
  • Abre cada escaneo y busca el código QR: recorta la imagen a la sección donde se encuentra el QR, aplica thresholding y detecta el QR.
  • Según los datos del QR, busca en la base de datos nombres, apellidos y nombre del curso del escaneo
  • Convierte a PDF, rota y renombra los escaneos.

Las operaciones a más detalles están detalladas en el código.