Entradas

Manejo Movimientos

Domingo 27 1:10 PM -  Lunes 28 1:25 AM Esta entrada documenta el proceso de implementación de los requerimientos R5 (Listar Movimientos) y R6 (Insertar Movimiento) en el sistema de control de vacaciones. Aunque se avanzó bastante, también fue un proceso lleno de complicaciones, decisiones difíciles, y soluciones parciales que aún requieren ajustes.   La implementación comenzó el domingo a la 1:00 pm usando la estructura que ya habíamos venido utilizando: idEmpleado como la clave foránea en la tabla Movimiento. Se crearon los siguientes procedimientos almacenados: sp_ListarMovimientosEmpleado: Devuelve los datos del empleado (nombre, documento, saldo vacaciones) y una lista de sus movimientos. sp_InsertarMovimientoEmpleado: Inserta un nuevo movimiento, valida el saldo (que no se vuelva negativo) y actualiza el saldo vacaciones del empleado. La integración del backend y frontend con ...

CRUD empleado completo

  Domingo 8:00 AM a 6:00 PM Esta entrada cubre el desarrollo del CRUD de empleado. Se ponen las operaciones (Create, Read, Update, Delete) juntas para este blog pues, en muchos casos, fueron similares los errores y procesos de desarrollo. Creación de SPs:   La mayoría de estos procedimientos tienen la estructura: Declaración de parámetros y variables Validaciones para la inserción/modificación de datos Realizar los cambios en las tablas Capturar errores. Al utilizar esta estructura se facilita la depuración del código pues se sabe más fácilmente cómo y donde están los errores, siempre y cuando sean errores definidos por nosotros. Sin embargo, sí hubieron muchos problemas en esta parte. Muchas veces no se lograba una conexión al SP, en algunos casos se debía a que se enviaban datos incorrectos desde el backend ó frontend, en otros casos el SP en sí era el que estaba mal, pues generaba errores de inserción o aspectos similares, los cuales fueron difíciles de encontrar. Backend :...

Proceso de Log In

Sábado 26 11:00 PM - Domingo 27 12:20 PM Esta entrada del blog documentará una sola sesión intensa que duró desde el sábado por la noche hasta el domingo al mediodía. La meta fue implementar un sistema de login con lógica para bloquear IPs después de múltiples intentos fallidos , registrar eventos en la bitácora de la base de datos , y crear toda la integración backend/frontend. Aunque parecía una tarea relativamente sencilla, nos tomó más de 8 horas de tiempo programando debido a varios desafíos que surgieron. Concepto inicial Cada intento fallido de login se registrara en una tabla BitacoraEvento . Después de 5 intentos fallidos en 30 minutos , la IP quedara bloqueada por 10 minutos . Estos eventos quedarían reflejados en una tabla relacionada con TipoEvento : 2 = Login no exitoso . 3 = Login bloqueado (lockout) . Obstáculos que surgieron: 1. La columna  id en BitacoraEvento Cuando intentamos registrar los eventos fallidos, recibimos un error: Cannot insert the value NULL into c...

Correcciones, primeras llamadas a BD y llenar las tablas

Imagen
 Viernes 9:00 pm a 3:00 am La entrada de este blog hablará de dos días. El primer día consistió en popular las tablas de la base de datos con los datos proporcionados por nuestro compañero Arturo. Esto fue más complicado de lo esperado por varios motivos: No se tenía el permiso para usar BULK: en sql, BULK permite cargar un archivo desde la computadora del usuario, sin embargo, el servidor parecía no tener el permiso necesario para permitir esto. Se intentó otorgarlo mediante la terminal, sin embargo, no se logró averiguar cómo se utiliza la terminal de Cloud Clusters correctamente. Como alternativa, se definió una variable SQL de tipo XML y copiar toda la información del documento a mano, ejecutando el proceso para cada tabla. Mal formato de tablas: Algunas de las tablas de la base de datos no tenían el formato apropiado que reflejaba los datos de prueba. Algunos ejemplos eran: PK's que tenían Identity (1,1) cuando los datos aportaban el Id, o, por el contrario, que la PK no tuvie...

Creación de tablas y código del backend

Imagen
 Miércoles 23 11:00 am - 3:00 pm y 6:00 pm - 8:00 pm Como se indicó la entrada anterior, hoy se crearon las tablas a través de queries de SQL, las cuales se guardaron en caso de que se tenga que restaurar o modificar las tablas. Estas son todas las tablas creadas hasta el momento, ya con enlaces de FKs: Es posible que según se avance en la funcionalidad, se deba modificar o agregar nuevas tablas. Estas tablas además incluyen campos restringidos y con valores predeterminados cuando sea oportuno. De esta manera se puede asegurar que se guarden únicamente datos apropiados y que, en caso de faltar cierta información, se pueda llenar sin mayor problema. Además se trabajó en la parte de backend. Se volvió a reestructurar los archivos de esta carpeta para dividirlos de la siguiente manera: dbConfig.js: este archivo se encarga únicamente de contener la configuración adecuada para la conexión de la base de datos, la cual se logró obtener en la entrada del blog anterior. dbService.js: en est...

Migrar a CloudClusters

  Lunes 21 de abril - de 6:00pm a 8:00pm  Martes 22 de abril - de 9:00pm a 10:00pm     Incluyo estos días juntos porque forman parte de el conjunto de pruebas y proceso de preparar tanto el frontend y backend para desarrollo.     Se tuvo que migrar la base de datos a una subscripción pagada de CloudClusters. Anteriormente se utilizó Azure con una cuenta de estudiante. Sin embargo, esta subscripción se acabó rápidamente después de incluir las tablas mencionadas en la entrada del blog anterior. Para evitar más problemas, se decidió utilizar CloudClusters para hostear un servidor SQL por un precio bajo.     Adaptar el código en sí presentó problemas. La solución final fue tan simple como agregar el puerto del servidor (el cual no se necesitaba en Azure) y cambiar las credenciales necesarias, sin embargo, tomó un conjunto de pruebas para poder averiguar que esta era la solución para adaptar el código anterior. Fuera de esta experiencia, crear el servi...

Aprendiendo React

 Domingo 20 de abril - de 9:00pm a 11:00pm     Este día se inició el desarrollo del frontend, o al menos se comenzó a averiguar cómo utilizar React en JavaScript. React es un framework para crear interfaces gráficas. Se trata en crear un dominio virtual que se encarga de actualizar una página web. Se decidió utilizar este método en vez de HTML puro como se hizo la tarea pasada para aprender las ventajas y desventajas para desarrollo en estos distintos ambientes.      El proyecto está dividido en dos carpetas: backend (encargado de manejar la conexión a la base de datos) y frontend (la aplicación en React). La solución que se investigó para relacionar ambos procesos se basa en ejecutarlos a la vez utilizando la dependencia "concurrently", la cual, en este caso, se utiliza para ejecutar procesos bash de manera concurrente, lo que permite mantener la conexión a la base de datos y el dominio virtual de React a la vez.     Se sospecha que habrá alguna ...