Closed edwargl7 closed 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,
Se enviaron algunos registros con algún error para verificar que el cargue continúe a pesar de los fallos en el registro:
Se muestran los datos cargados a la base de datos:
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:
Pruebas a revisar:
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 ","
Se hace la prueba con datos separados por ","
Se registran los datos correctamente en la base de datos y se valida el funcionamiento de los separadores con "," y con ";"
No se ve afectado el tiempo de ejecución de la lambda.
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
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:
Uso de un solo archivo con la extension xlsx para el cargue masivo, se toma en cuenta que este tipo de archivo permite hacer unas validaciones para simplificar el cargue al usuario.
Se va a trabajar en una estructura Json que contenga los parámetros necesarios para el cargue de los registros al endpoint, este va a ser enviado a la lambda y queda por definir el encargado de el envío (mid o mf). Se busca que el cargue masivo sea transversal.
Para el manejo de las filas vacías en los archivos se toma la decisión de ignorarlas y continuar con los otros registros, las celdas vacías van a tener un manejo diferente donde se va a evaluar si la celda contiene información requerida, de acuerdo a esto se podrá continuar con el registro o en caso contrario no se hace el registro y se informa del error pero se continua con los demás.
Se va a implementar python para el desarrollo de la lambda encargada del cargue masivo, por lo tanto se va a hacer la adaptación del código desarrollado previamente al nuevo lenguaje manteniendo la estructura general por lo que no se parte de cero en el desarrollo.
Se planea iniciar con la adaptación de pequeñas partes del código y creación de la nueva lambda.
Se realiza la decodificación de la información en base64 y se usa pandas para crear la tabla que contiene los datos:
Se crean los registros en la base de datos usando el endpoint y el payload con los datos del excel:
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:
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
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 :
Después de realizar el ajuste se envían correctamente los datos al endpoint:
Se realiza tambien un ajuste en el código para eliminar las filas que estan completamente vacías:
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:
{
"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
}
}
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
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:
Muy buena documentación. Por favor subir código @alexhrr.
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
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