/API-NestJS-Sky-Calendar

NestJS API for Sky Calendar App

Primary LanguageTypeScriptMIT LicenseMIT

Nest Logo

Sky Calendar API NestJS

Es el API REST para la WebAPP/PWA SkyCalendar integrado con Web Authentication para el inicio de sesion passworless

Quality Gate Coverage Vulnerabilities Bugs Security Rating Code Smells Maintainability Rating Build With TypeScript Build With TypeScript

📒 Index

Comenzando 🚀

Estas instrucciones te permitirán obtener una copia del proyecto en funcionamiento en tu máquina local para propósitos de desarrollo y pruebas.

Pre-Requisitos 📋

Software requerido

NodeJS >= 14.X
NPM >= 8.X
NestJS >= 8.X
MySQL >=7.X

Software opcional

Visual Studio Code ( O el editor de su preferencia)

Instalación 🔧

Para ejecutar un entorno de desarrollo

Previamente ejecutar el comando en la terminal para descargar "node_modules" para el funcionamiento del proyecto

 npm install

Previamente a ejecutar el servidor en desarrollo configurar el archivo .env con las credenciales del servidor correos y base de datos , ejecutar :

 npm run start:dev

Dirigirse a la ruta http://localhost:3000/ donde tendra el API REST levantada

Desarrollo ⚙️

Las siguientes instrucciones serviran para ejecutar en su entorno local la pruebas unitarias realizadas para el proyecto

Unit-Test

Para ejecutar todos los Unit Test desarrollados en Jest y reporte de cobertura de codigo ejecutar el comando

 npm run test:cov

La carpeta con la cobertura del codigo se creara en la raiz del proyecto con la siguiente ruta coverage/Icov-report/index.html el cual se puede visualizar

Unit Test Coverage

E2E Test

Los test fueron desarrollados en Jest con ayuda de SuperTest realizados a la API , para validar el funcionamiento adecuado en un entorno más real

Para ejecutar todos los E2E Test y reporte de cobertura de codigo ejecutar el comando

 npm run test:e2e:cov

La carpeta con la cobertura del codigo se creara en la raiz del proyecto con la siguiente ruta coverage-e2e/Icov-report/index.html el cual se puede visualizar

E2E Test Coverage 1

E2E Test Coverage 1

Build

Para generar el build de producción del proyecto ejecutar el siguiente comando:

 npm run build

Despliegue 👨🏻‍💻

Para desplegar el proyecto mediante Docker se tiene los archivos Dockerfile y docker-compose.prod.yaml, los cuales tienen preconfigurado la imagen y dependencias necesarias para levantar el proyecto

Para construir la imagen y ejecutarla tenemos el siguiente comando , el cual tambien tomara nuestras variable de entorno del archivo env

Ejecutar el siguiente comando en la raiz del proyecto

 docker-compose -f docker-compose.prod.yaml --env-file .env up --build

Docker 1

Docker 2

En caso de requerir volver a ejecutar el contenedor del proyecto previamente creado ejecutar el comando:

 docker-compose -f docker-compose.prod.yaml --env-file .env up

Analisis de Codigo 🔩

Pre requisitos

En la raiz del proyecto se tiene el archivo sonar-project.properties el cual tiene las propiedades necesarias para ejecutarlo sobre un SonarQube

Configurar los apartados : sonar.host.url , sonar.login sonar.password con los datos de su instancia correspondiente o usar SonarCloud con su token correspondiente

Sonaqube >= 9.X

SonarQube Properties

Las pruebas fueron realizas sobre SonarQube 9.5 y SonarCloud para ejecutar el analisis de codigo ejecutar el comando para la instancia local:

npm run sonar

Reporte de Cobertura en SonarCloud

SonarQube Cloud 1

SonarQube Cloud 2

SonarQube Cloud 3

Integración Continua

Se realizo un CI con SonarCloud para ejecuta de manera automatica los test

Se creo la carpeta .github/workflows con el archivo build.yml que contiene los pasos para desplegar mediante GitHub Actions nuestro CI

CI 1

Logger

Se integro winston para reemplazar el logger de NestJS para realizar seguimiento y conservacion de los logs segun sea requerido

En el archivo .env se tienen los siguientes apartados configurados por default:

APP_NAME=SKY_CALENDAR
DATE_PATTERN=YYYY-MM-DD
MAX_SIZE=20m
MAX_DAYS=14d

Por default la carpeta donde se guardan los logs es LOG , el formato configurado es JSON

LOGGER 1

LOGGER 2

Construido con 🛠️

Las herramientas utilizadas son:

  • NestJS - El framework para construir aplicaciones del lado del servidor eficientes, confiables y escalables.
  • NPM - Manejador de dependencias
  • Jest - Framework Testing para pruebas unitarias
  • Docker - Para el despliegue de aplicaciones basado en contenedores
  • SonarQube - Evaluacion de codigo on premise
  • SonarCloud - Evaluacion de codigo cloud
  • Visual Studio Code - Editor de Codigo
  • Prettier - Formateador de Codigo
  • WebAuthn - Estándar web del proyecto FIDO2 de la Alianza FIDO
  • TabNine - Autocompletador de Codigo
  • Winston - Logger para NodeJS

Versionado 📌

Usamos GIT para el versionado.

Autor ✒️