Implementar diferentes herramientas en un proyecto que contemple el correcto funcionamiento del servicio, el cual sea alojado en la nube.
Esto nos va a servir para poder controlar y verificar el funcionamiento del mismo asi como tambien analizar las metricas, los testeos, manejo de CI/CD, creacion y configuracion de archivos docker.
Podes acceder a la api a traves del siguiente link
En la documentacion podras encontrar mas informacion sobre que rutas estan disponibles para consultar y/o realizar solicitudes.
-
Servidor: Node, Express, NPM, Axios
-
Local: Nodemon, EsLint
-
Base de datos: Supabase (Postgres)
-
Testing: Jest
-
Host: Flyio
-
Documentacion: Swagger
-
Consultar frases iconicas y famosas de la serie
-
Acceder a los diferentes endpoints
-
Consultar todos los personajes
-
Consultar que frase pertenece a que personaje
-
Consultar el estado de la api en health check
-
Posibilidad de jugar, sumar puntos (ranking)
-
Consultar a que capitulo/temporada pertenece la frase
git clone https://github.com/TomasS-R/SimpsonsTrivia
npm install
nodemon --env-file=.env src/app.js
npm run dev
Important
Al correr este proyecto puedes agregar las siguientes variables de entorno al archivo .env (debes crear este archivo, o cambiarle el nombre al archivo .env.template) ya sea que lo corras de forma local o en la nube ☁️ si completas los campos debes cambiar la variable CONNECTPOSTGRES
y colocarla en True
ya que si no, no tomara las variables de la Base de datos.
Variables de entorno para la conexion con postgress
Nombre | Valor default | Descripcion |
---|---|---|
DATABASEUSER | - | Campo usuario de la base de datos |
DATABASEPASS | Tu constraseña | La contraseña de la base de datos |
DATABASEHOST | - | El host que te provee la base de datos |
DATABASEPORT | - | El puerto que te provee |
DATABASENAME | postgress | El nombre que te provee |
Note
Por defecto si no tiene valor correra en el puerto 3000
PORT=
Note
Por defecto tiene 'localhost:' debes cambiarlo al subirlo a la nube o puedes dejarlo vacio como en mi caso
HOST
Note
JWT_SECRET es para generar un json web token este lo debes generar tu mismo, puedes combinar letras y numeros o usar un generador de contraseñas
JWT_SECRET=
Note
Por defecto si no tiene valor asignado esta en False
, en caso de haber cargado las variables colocarlo en True
CONNECTPOSTGRES=
Note
Dependiendo si se desplega en dev va a seguir por defecto en desarrollo, si no va a estar en produccion.
NODE_ENV=
Note
En mi caso lo coloque en flyio por lo que estara apuntando a simpsons-trivia.fly.dev pero debes colocar el tuyo segun la url que te entregue el proveedor.
URLHOST=
Note
Si no se ingresa ninguna url por default permitira todas las url´s, puedes colocar una o varias rutas de esta forma =https://www.url1.com,http://www.url2.com,http...
CORS_ORIGIN=
Note
Ingresa tu DSN de sentry si tienes y si quieres realizar un monitoreo de la api mas preciso, si no puedes dejarlo vacio!
SENTRY_DSN=
Note
Esto es opcional, pero si no lo configuras no podras manejar el login y el registro.
SUPABASE_URL=
Note
Esto es opcional, pero si no lo configuras no podras manejar el login y el registro. Esta clave la puedes encontrar en supabase.com/dashboard > Project API Keys > anon public
SUPABASE_ANON_KEY=
Note
Esta clave la puedes encontrar en supabase.com/dashboard > Project API Keys > service rol
SERVICE_ROLE_KEY=
Note
Por defecto si no tiene valor asignado esta en False
, en caso de haber cargado las variables colocarlo en True
para conectarlo correctamente
CONNECTREDIS=
UPSTASH_REDIS_URL=
UPSTASH_REDIS_TOKEN=
Para realizar testing del proyecto ejecutar el siguiente comando:
npm test
Esto ejecutara los tests que se encuentran dentro de la carpeta tests.
Para construir la imagen en modo desarrollo:
docker build -t my-trivia-node-app --target dev .
Para construir la imagen en modo producción:
docker build -t my-trivia-node-app --target prod .
docker run -p 3000:3000 my-trivia-node-app
docker run --env-file .env -p 3000:3000 my-trivia-node-app
Para construir el docker-compose para modo producción:
docker-compose up --build
npm run lint
📂 PROYECTO-DEVOPS
├── 📂.github
│ └── 📂 workflows # Contiene los archivos de CI/CD para GitHub Actions
│ ├── node.js.yml # Pipeline de CI y CD para la construccion, subida a docker hub y el deploy en flyio o render
│ └── release.yml # Archvio que se encarga de hacer un release automatico en github
│
├── 📂 media # Contiene imagenes para el readme
├── 📂 src # Contiene el código fuente de la aplicación
│ ├── app.py # Archivo de arranque del proyecto
│ ├── 📂 account # Contiene el manejo de cuentas de los usuarios
│ │ ├── 📂 roles # Contiene los archivos que manejan los roles
│ │ │ ├── roleMiddleware.js # Intermediario en controlar y verificar los roles y accesos
│ │ │ └── rolesManager.js # Clase donde se manejan la jerarquia y cada tipo de rol
│ │ │
│ │ ├── authSupabase.js # Archivo de inicializacion y configuracion con supabase
│ │ ├── login.js # Archvio para iniciar sesion y administrar tokens
│ │ ├── index.ejs # Configuracion para front end de login y registro
│ │ └── register.js # Archivo que registra a los usuarios y valida los campos
│ │
│ ├── 📂 controllers # Contiene archivos de controladores
│ │ └── triviaControllers.js # Archvio que es intermediario entre routes y queries
│ │
│ ├── 📂 dbFiles # Contiene archvios de la base de datos
│ │ ├── 📂 creatingTables # Contiene archivos de la creacion de las tablas automaticas
│ │ │ └── userTables.js # Nombres de tablas y campos de cada una
│ │ │
│ │ ├── 📂 monitoring # Contiene los archvios correspondientes al monitoreo de la api
│ │ │ └── sentryConfig.js # Configuracion para la conexion con Sentry
│ │ │
│ │ ├── databaseManager.js # Archivo que se encarga de realizar la conexion a pg al iniciar
│ │ └── queries.js # Archvio que realiza las consultas a la BD
│ │
│ ├── 📂 routes # Contiene los archvos que manejan las rutas
│ │ ├── apiRoutesDoc.yaml # Explica como comunicarse con cada ruta
│ │ ├── routes.js # Todas las rutas del proyecto
│ │ ├── securityRoutes.js # Maneja la seguridad de las rutas
│ │ └── swaggerDocs.js # Se encarga de la interfaz de apiRoutesDoc.yaml
│ │
│ └── 📂 scrapQuotes # Contiene los archivos de las frases
│ ├── characters_simpsons.csv # Tiene los personajes de la serie animada
│ └── quotes_simspons.csv # Se encuentran las frases de la serie y su numero de personaje
│
├── 📂 tests # Contiene todos los tests
│ └── queries.test.js # Archivo que tiene y realiza los tests del proyecto
│
├── .env.template # Plantilla para las variables de entorno
├── .gitignore # Archvios que no se suben a github
├── changelog.md # Cambios que se realizan en cada version
├── docker-compose.yml # Configuración de Docker Compose
├── Dockerfile # Archivo Docker para construir la imagen de la api
├── eslint.config.mjs # Configuracion de la dependencia EsLint
├── fly.toml # Configuracion para deploy en Fly.io
├── license.txt # Archivo de licencia del proyecto
│
├── 📂 package.json # Contiene las dependencias del proyecto y + configuraciones
│ └── package-lock.json # Maneja las dependencias
│
└── readme.md # Instrucciones principales de la api y usos
Flujo de la api
Flujo de sesiones de usuarios
Flujo de juego de usuarios