115 lines
3.6 KiB
Markdown
115 lines
3.6 KiB
Markdown
|
# 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](https://stackoverflow.com/questions/52998331/imagemagick-security-policy-pdf-blocking-conversion))
|
||
|
- 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](https://github.com/launchbadge/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](https://en.wikipedia.org/wiki/Thresholding_%28image_processing%29) 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.
|
||
|
|