udistrital / sisifo_documentacion

0 stars 0 forks source link

Ajustes microservicio carga masiva #228

Closed edwargl7 closed 1 month ago

edwargl7 commented 1 month ago

Se requiere realizar ajustes de preparación para el despliegue del microservicio. Se debe ajustar el nombre del endpoint y documentación del README.

Sub Tareas

Criterios de aceptación

Requerimientos

No aplica

Definition of Ready - DoR

Definition of Done - DoD - Desarrollo

alexhrr commented 1 month ago

Se realiza el ajuste para que se pueda usar temporalmente el separador ";" y se resuelven errores que se tenían en el formato csv para cargar los datos al endpoint.

Una vez solucionados los errores se logra el cargue masivo y el envío al gestor documental,

image

Se enviaron algunos registros con algún error para verificar que el cargue continúe a pesar de los fallos en el registro:

image

image

image

Se muestran los datos cargados a la base de datos:

image

Tambien se obtienen los datos del tiempo de ejecución que para este caso fue aproximadamente de 14 segundos, la memoria se puede reducir nuevamente en otra prueba para verificar la cantidad usada:

image

edwargl7 commented 1 month ago

Pruebas a revisar:

alexhrr commented 1 month ago

Validación separadores ( ; , )

Se agrega en el codigo una condición para que continúe con el otro separador en caso de no ser ";" tambien muestra un mensaje de error si el separador no es ";" o ","

image

Se hace la prueba con datos separados por ","

image

image

Se registran los datos correctamente en la base de datos y se valida el funcionamiento de los separadores con "," y con ";"

image

No se ve afectado el tiempo de ejecución de la lambda.

Validación para archivos xlsx

Se debe hacer uso de la libreria excelize de go para leer archivos excel.

Se hace una verificación inicial del tipo de archivo directamente en el codigo o se puede enviar previamente la extensión

alexhrr commented 1 month ago

Se asiste a una reunion junto al líder para realizar una revision de los ajustes realizados y las validaciones mencionadas anteriormente, en la reunion se determinan los siguientes aspectos importantes para continuar con la implementación:

alexhrr commented 1 month ago

Cargue masivo xlsx python

Se realiza la decodificación de la información en base64 y se usa pandas para crear la tabla que contiene los datos:

Captura de pantalla 2024-10-23 a la(s) 8 34 56 p m

Captura de pantalla 2024-10-23 a la(s) 8 22 57 p m

Se crean los registros en la base de datos usando el endpoint y el payload con los datos del excel:

Captura de pantalla 2024-10-23 a la(s) 8 31 41 p m

alexhrr commented 1 month ago

Pruebas cargue masivo

Se realizan ajustes en el código para que el archivo continue con los registros cuando se encuentre un error en los datos ingresados por el usuario En este caso el registro 2 contiene una celda vacía y el registro 7 contiene un rol que no está creado en la base de datos:

Captura de pantalla 2024-10-24 a la(s) 5 30 10 p m

Se puede observar que se identifica que la fila 2 contiene una celda vacía y que se continua con el registro de los otros datos, asi mismo se identifica el error con la fila 7

Captura de pantalla 2024-10-24 a la(s) 5 30 19 p m

Se encuentra que al haber una fila vacía el df toma los números como decimales, lo que genera error al enviarlos al endpoint, asi que se debe hace la conversion a entero :

Captura de pantalla 2024-10-24 a la(s) 5 33 04 p m

Después de realizar el ajuste se envían correctamente los datos al endpoint:

Captura de pantalla 2024-10-24 a la(s) 5 38 42 p m

Se realiza tambien un ajuste en el código para eliminar las filas que estan completamente vacías:

Captura de pantalla 2024-10-24 a la(s) 5 49 20 p m

edwargl7 commented 1 month ago

Se crea base de lambda para implementación con python en la rama https://github.com/udistrital/cargue_archivo_mid_serverless/tree/feature/cargue-python

Pruebas locales: image

edwargl7 commented 1 month ago
{
  "service": "Usuario",
  "endpoint": "/periodos",
  "structure": {
    "FechaFin": {
      "posicion": 0,
      "required": true
    },
    "FechaInicio": {
      "posicion": 1
    },
    "Finalizado": {
      "posicion": 2,
      "parse": "booleano",
      "required": true
    },
    "RolId.Id": {
      "posicion": 3,
      "parse": "int"
    },
    "UsuarioId.Id": {
      "posicion": 4,
      "parse": "int"
    }
}
}

"UsuarioId.Id": 1

"url": "http/.../periodos"
{
   "FechaFin":"09-12-2024",
   "FechaInicio":"07-12-2024",
   "Finalizado":true,
   "RolId":{
      "Id":1
   },
   "UsuarioId":{
      "Id":78
   }
}
alexhrr commented 1 month ago

Ajustes lambda python

Se realiza la integracion del cargue masivo pasando de go a la lambda de python, se ejecuta con el base64 directamente en el código para verificar su funcionamiento

Captura de pantalla 2024-10-25 a la(s) 6 45 33 p m

Captura de pantalla 2024-10-25 a la(s) 6 45 48 p m

Posteriormente se realiza la integracion con el microcliente, donde se selecciona el archivo y se carga al gestor documental, asi mismo se envia a la lambda el archivo en base64. Se logra ejecutar y registrar la información suministrada en el archivo:

Captura de pantalla 2024-10-25 a la(s) 7 52 34 p m

Captura de pantalla 2024-10-25 a la(s) 7 52 50 p m

Captura de pantalla 2024-10-25 a la(s) 7 52 18 p m

Captura de pantalla 2024-10-25 a la(s) 7 53 50 p m

edwargl7 commented 1 month ago

Muy buena documentación. Por favor subir código @alexhrr.

edwargl7 commented 1 month ago

Muy buena implementación y se observa el icono adicional de cargue masivo, apropiado para la función del botón. En la siguiente iteración se recomienda separar la lógica en funciones.

Observaciones microcliente

Pruebas adicionales lambda

Nota: Se elimina rama develop y se crea nuevamente basada en la rama de desarrollo con python, se realiza limpieza de ramas del repositorio de cargue masivo mid serverless