4.1 KiB
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 variableSCAN_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.
Base de datos
IMPORTANTE: Este sistema (backend y frontend) depende de que la base de datos tenga ciertos registros con ciertos ids, estos valores estan escritos en el código (hard coded)
- La tabla
custom_label
debe tener una fila con id:0
y valor<vacio>
- La tabla
course
debe tener filas para los cursos matpel:- Matpel 1 con id
10
- Matpel 2 con id
11
- Matpel 3 con id
12
- Matpel 1 con id
Estos valores deben estar en la base de datos. Si se cambiaron, es necesario cambiarlos en el código (sería bueno sacarlos de .env).
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.