- Modificacion de mejora para detectar el archivo config para hacer el deploy en fly.io en gitignore y dockerignore
- Se copia el archivo config en el dockerfile para correr en fly.io
- Archivo deleteUsersAuth que elimina usuarios del sistema de Auth de supabase, este archivo se ejecuta automaticamente y elimina los usuarios anonimos que no se registraron en las ultimas 3 horas, la llamada al cronjob se encuentra en app.
- Ruta account se separo el login y el registro del inicio de la api, para una interfaz mas limpia, asi mismo tambien se separo para que los tokens de los usuarios se creen al momento de ingresar a una pagina especial (como la trivia).
- Variable de entorno nueva SERVICE_ROLE_KEY en .env va a servir para realizar determinadas modificaciones en nuestro proyecto que requieran una key con altos privilegios.
- Token refresh y su configuracion en el archivo tokenRefresh.
- Sesiones anonimas, se crean, modifican y cierran en el archivo sessionHandler que actua como middleware, este middelware se debe colocar en la ruta donde se va a usar (verifyUserSession) y tambien en el registro.
- Conexion con Redis y manejo de conexion en el archivo redisManager los usuarios no registrados pasaran por auth -> redis (almacena dicha informacion temporalmente hasta el registro) -> tabla usuarios supabase.
- Se agrego la ruta /quotes/:id/answer en el archivo routes la cual recibe la respuesta de una pregunta/frase.
- Creado el archivo trivia para poder realizar pruebas con los datos y el frontend del juego.
- Se agrego una nueva tabla en userTables esta tabla va a guardar las imagenes de perfil de los usuarios (estas van a estar almacenadas en supabase storage).
- Los usuarios en esta actualizacion tendran un user tag para en el futuro implementar una busqueda de usuarios de ser necesario, esto se genera en register tomando como referencia el nombre del usuario.
- Se agrego y se mejoro el uso de variables de entorno, a partir de ahora las variables de entorno se llaman 1 sola vez en el archivo config para evitar llamadas repetitivas en diferentes partes del proyecto.
- Creado el flujo del juego (usuarios registrados) con los datos de puntaje: ultimo, maximo, reciente, respuestas: correctas, incorrectas, totales, tiempo promedio en el archivo triviaControllers funcion answerQuestion. (Mas info en el diagrama).
- Agregadas las rutas /gameover, /user/stats (estadisticas de juego X usuario), /user/data (informacion del perfil del usuario con estadisticas de juego) en routes.
- Libreria ioredis para el uso de upstash en package y congigurado en redisManager.
- Archivo queriesRedis para manejar todas las consultas a travez de este archivo, actua de igual forma que el archivo de postgresSQL.
- El archivo app se modifico el applimiter para que pudiera procesar las solicitudes de JMeter sin ningun problema, a partir de ahora deberas configurar en JMeter que el encabezado sea de tipo (nombre) User-Agent y (valor) Apache-HttpClient/4.5.13 para que pueda realizar las pruebas correctamente, de otro modo saltara que haz realizado demasiadas solicitudes.
- Archivo fly el cual a llegar a determinado punto la aplicacion realizara un esalado automatico activando la segunda maquina virtual (VM) y se disminuyo la memoria asignada de 512 > 256 mb.
- A partir de esta actualizacion el login y el registro no seran visibles en produccion solo estaran disponibles en local y en modo desarrollo.
- Ahora en el archivo register si un usuario se registra, automaticamente va actualizar el supabaseUserId para que no haya que crear usuarios de supabase sin sentido.
- Se mejoro la ui del archivo index ahora solo los usuarios en localhost van a poder realizar pruebas y cualquier usuario podra acceder a la documentacion de swaggerDocs desde la ruta principal.
- Se mejoro la documentacion de las rutas en el archivo apiRoutesDoc y se agregaron nuevas rutas.
- Se arreglo la consulta de getQuotesByCharacter en el archivo queries debido a que no devolvia las frases de los personajes correctamente.
- Se arreglo la funcion getRandomQuestion en queries para que ademas de que mostrara los pesonajes tambien envie los id de cada personaje, esto permitira poder manejar y armar el juego de trivia.
- Se establecio un nuevo sistema de seguridad para las rutas, robusteciendo el sistema ya previsto anteriormente en securityRoutes y se redujo la cantidad de intentos de fuerza bruta de 5 a 3 intentos, asi tambien se establecio los nuevos api limiter para endpoints críticos, para el servidor, API con token y API pública.
- Se mejoro el archivo userTables ahora los nombres de las tablas se asignan al comienzo del archivo para evitar romper la estructura de las tablas y asi poder modificarlo de manera mas comoda y rapida.
- Se mejoro el archivo protected, para poder moverse entre los diferentes paneles, se agregaron ls estadisticas del usuario logeado asi como tambien la informacion del perfil del mismo.
- Se elimino la tabla users_anonimus de userTables
- Agregadas las variables de entorno supabase al workflow
- Actualizado package-lock
- Supabase Authentication: Se movio la logica y la autenticacion a supabase ya que ofrece una base solida en cuanto a seguridad para login y registro asi como tambien ofrece oAuth con otras apps.
- Se agrego supabaseAuth en triviaControllers para poder obtener determinados datos de la autenticacion y asi aprobar o no a los usuarios.
- 2 variables de entorno para la conexion con supabase SUPABASE_URL y SUPABASE_ANON_KEY
- Se agrego informacion en el readme sobre como implementar las nuevas variables de entorno.
- Mas informacion al momento de logearse/autenticarse en login.
- Dependencia Cookie Parser para manejo de tokens en login y registro.
- Dependencia Zod para mejorar la seguridad y y las validaciones en el registro.
- Dependencia ejs para la implementacion y manejo del login y registro.
- Index para poder manejar correctamente la implementacion con el front end en cuanto a login y registro.
- Ruta logout para cerrar sesion de la cuenta y ruta protected la cual permite acceder a recursos que solo usuarios registrados/logeados (rol: user) pueden ver en routes.
- Archivo protected en el se podra ver informacion solo para usuarios logeados con el rol requerido (user).
- Se genero el archivo authSupabase el cual maneja la conexion con la api de supabase.
- La tabla user_anonimus para una futura implementacion de usuarios no logeados que quieran jugar sin tener que perder el progreso en esa sesion, tabla agregada en userTables.
- Se modificaron las rutas protegidas para que funcionen correctamente con supabase en routes.
- Modificado el archivo roleMiddleware para manejar adecuadamente los roles.
- register para el uso correcto con supabase auth.
- Memoria de la virtual machine de flyio reducida de 1024mb a 512mb para evitar costos mayores en la facturacion, cambio realizado en el archivo fly.toml.
- Mejorado la ruta home, ahora se visualiza el login y el registro en esta ruta, asi tambien se mejoro el mensaje con respecto a la redireccion de la documentacion.
- La tabla usuarios del archivo userTables se cambio el campo password_hash a supabase_user_id y de tipo UUID para conectar los usuarios creados mediante Supabase Auth a los usuarios de la tabla users_trivia.
- Se reestructuro el archivo userTables para que se puedan crear nuevas tablas sin tener que modificar parametros en otros archivos como lo era en el archivo app.
- Se reestructuro la funcion createDatabaseTables del archivo app para que automaticamente detecte las tablas del archivo userTables de esta forma allí se pueden crear muchas tablas y el sistema automaticamente las creara en la base de datos.
- Mejorado y arreglado un bug en queries que no reconocia las tablas al modificar el archivo userTables.
- Se elimino el archivo PassportConfig
- Se quito la configuracion de JWT de las rutas protegidas
- Se quitaron las dependencias bcryptjs, passport-jwt, passport-local, passport y se remplazaron por el sistema de Supabase.
- Test de verificacion de email (esto lo verificara ahora de ahora en adelante supabase).
- Dependencia swagger-themes para personalizar la documentacion de swagger (modo oscuro y mas temas) en swaggerDocs
- Agregados mas detalles al momento de hacer deploy y ver en la consola/terminal en app
- Exportada y acortada la routeapi del archivo routes
- Se mejoro la ruta "home" para que muestre correctamente la url segun el entorno de desarrollo en routes
- docker-compose mejorado
- Se arreglo un bug que al consultar la frase y personajes devolvia siempre los mismos 3 personajes erroneos, ahora obtiene 10 personajes y de esos 10 obtiene 3 como incorrectos en el archvio queries
- Corregida la identacion del archivo triviaControllers
- Arreglados los nombres de algunos personajes en characters_simpsons
- Al ejecutar el comando npm run dev se modifico para que antes de ejecutar la api se realicen los tests correspondientes en package
- Todos los usuarios al registrarse/logearse recibiran un token, esta modificacion fue realizada en login y register
- Se retiro la implementacion del deploy en render y se transfirio definitivamente a flyio en workflows
- Ignorar todo git mediante **/.git en el archivo dockerignore
- Configuracion de Sentry para su uso y reportes en el archivo sentryConfig
- Dependencias de Sentry: @sentry/node y @sentry/profiling-node al archivo package
- 3 variables de entorno en .env CORS_ORIGIN, URLHOST y SENTRY_DSN
- Esquema de funcionamiento y del flujo de la api hacho con excalidraw en readme y en svg
- Archivo fly.toml el cual contiene la configuracion para hacer el deploy en fly.io
- Optimizado el dockerfile
- Agregada la estructura del proyecto en el readme
- El archivo node en el cual se realizo la configuracion para desplegar en fly.io y se comento/quito la configuracion de despliegue en render
- Se cambio en el dockerfile el comando CMD a ENTRYPOINT para una mejor optimizacion
- Realizadas varias modificaciones en el archivo app:
- Se mejoro el manejo de CORS
- Inicializacion de Sentry
- Modificada la funcion de las rutas de setupRoutes > setupRoutesV1
- Se insertaron las rutas del archivo routes dentro de una funcion para su correcto funcionamiento al iniciarse la api.
- Mejorada la logica y el manejo de CORS en app a partir de ahora maneja una o varias rutas
- Modificado el puerto del dockerfile en produccion para que lo detecte de las variables de entorno.
- Modificado el archivo app.js para su correcto deploy.
- Reconfigurado el archivo routes para un mejor manejo y evitar problemas en el deploy
- Redeploy en render
- Comando npm start modificado para correcto deploy. Archivo package.
- Se corrigio el error que se producia al iniciar la aplicacion al ejecutar node src/app.js y hacia que se cayera a los minutos de haber realizado el deploy. Archivo package.
- Configuracion de passport mejorada y arreglada en passportConfig.
- Inicializado passport al correr la aplicacion en app.
- Commit de correccion del archivo release
- Nombre del archivo changelog a CHANGELOG
- Commit de correccion del archivo release
- Commit de correccion del archivo release
- Ruta host del servidor
- Archivo de release.
- La ruta al ingresar a la home de la api.
Important
A partir de esta actualizacion se trabajara en obtener metricas usando sentry y se mejorara la seguridad de la api para hacerla mas robusta en cuestiones de seguridad.
- Dependencias eslint, @eslint/js, globals, express-rate-limit, passport, passport-jwt y passport-local en package
- Se creo el archivo eslint el cual contiene la configuracion de eslint para el proyecto.
- Instalada la dependencia CORS para realizar solicitudes sin problema.
- Configurado CORS en el archivo app.
- El comando npm lint al archivo Workflows.
- Mas de 350 frases añadidas al archivo.
- Archivo passportConfig para la autenticacion y proteccion de rutas.
- Se limitaron la cantidad de solicitudes a realizar para controlar mejor la seguridad de la api.
- Se crearon las funciones getUserByEmail y getUserById para la autenticacion mediante passport.
- Archivo securityRoutes para manejar la seguridad de las rutas adecuadamente.
- Medidas de fuerza bruta y limites de intentos a las rutas para evitar colapsar la api.
- Archivo release que se encarga de hacer una release automaticamente cuando el commit contiene un tag asignado, el workflow se encarga de colocar la ultima version del changelog en la release.
- URLHOST en las variables de entorno del archivo env.
- Sistema de roles, se creo un sistema basado en roles para poder acceder a diferentes puntos de los endpoints, el sistema es jerarquico y se implementaron medidas de seguridad adicionales a las rutas.
- Archivo rolesManager clase que se encarga de manejar los roles, asi como tambien las comprobaciones y jerarquia.
- Archivo roleMiddleware se encarga de comprobar si el usuario tiene o no los permisos necesarios para poder realizar consultas/cambios.
- Ahora al solicitar las frases por personaje mostrara la cantidad total de frases que tiene ese determinado personaje.
- Readme correcciones varias y agregados nueva info
- Se modificaron los archivos los cuales eslint sugeria arreglos o configuraciones adicionales
- Se arreglaron nombres de personajes
- Se optimizo el archivo Docker
- Se mejoro el archivo de la documentacion de swagger
- Se mejoro el changelog siguiendo las recomendaciones de Keepachangelog
- Mejorado la descripcion al ejecutar en produccion
- Mejorado el readme
- Estado de la api en vivo: a partir de esta version en el archivo Readme se podra visualizar el estado de la api, si esta activa o esta caida.
- Agregada la documentacion via swagger
- Se creo el archivo swaggerDocs el cual contiene las librerias para correr la documentacion y la conexion con los archivos respectivos.
- Se agregaron las dependencias swagger-ui-express y yamljs al proyecto en el archivo package
- Agregada la ruta /quotesbycharacter/:characterId (solicita el id del personaje) se agrego una nueva funcion en triviaControllers y en queries
- Sa agregaron las funciones para obtener los personajes
- Agregada la ruta /characters para obtener todos los personajes con su respectivo id
- Se movio el archivo apiRoutesDoc dentro de la carpeta routes
- Corregida la ruta /random-quote
- Se quito un test repetido
- Creado flujo de preguntas con respuestas
- Se agrego la ruta /random/quote la cual contiene una frase, el id de la frase y 4 opciones de respuestas (3 incorrectas + 1 correcta).
- Agregado 1 test nuevo en queries.test.js el cual realiza las comprobaciones de si el procedimiento random quote es correcto
- Mejorado los logs de la conexion a la base de datos agregados emojis para una mejora visual
- El registro y el login: a partir de esta actualizacion el usuario que se registre debera colocar username, email y password para poder ingresar. Al momento de mostrar los usuarios se mostrara el username para no revelar datos sensibles como puede ser el email.
- Creada la ruta de health check para verificar el estado de la api routes.js
- Arregladas las versiones de las acciones debido a warnings en el deploy hacia render en el archivo node.js.yml
- Arreglado descripcion de la ruta home en routes.js
- Agregado deploy automatico a render (Actions) al realizar un commit hacia github node.js.yml
- Se agrego la variable de entorno NODE_ENV al archivo .env.template
- Se creo el archivo dockerfile
- Se creo el archivo docker-compose.yml
- Se corrigió el flujo de actions
- Se elimino el archivo node.js.yaml
- Se agrego el archivo node.js.yaml
- Se corrigió el archivo readme
- Se agrego la carpeta media para subir imagenes, gif, etc...
- Se agrego la libreria jest para pruebas unitarias.
- Se agrego la carpeta tests junto con un archivo (queries.test.js) el cual realiza las pruebas unitarias.
- Se agregó el archivo character_simpsons para los personajes en la DB
- Se agregó el archivo quotes_simspon contiene las frases de la serie para la DB
- Se agrego el archivo .env.template
- Se agregaron/mejoraron los codigos de error al registrarse en el archivo register.js
- Se agrego el archivo apiRoutesDoc.yaml el cual contiene la informacion de las rutas y como comunicarse con ellas de manera correcta, asi como tambien las respuestas a recibir de las mismas.
- El proyecto cuenta con licensia MIT
- Agregada la libreria axios
- Se mejoro y perfecciono el archivo app.js dando a entender cuando se trabaja en local y en la nube.
- Se actualizo la version de express de la 4.19.2 a la 4.20.0
- Simplificada la logica de iniciar el proyecto
- Se modifico el host en el archivo app para que se pueda modificar el host de manera rapida y que aparezca correctamente al correr el proyecto.
- Se movio la logica de las rutas al archivo triviaControllers.
- Mas informacion en el archivo readme.
- Se elimino y se remplazo los archivos changelog por changelog.md y license por license.md para poder documentar en el formato markdown
- Primer release