Skip to content

Projeto desenvolvido durante o módulo III do bootcamp Ignite da Rocketseat cujo objetivo foi utilizar na pratica conceitos do SOLID, design patterns, Docker, JWT, Refresh Token, RBAC e outros conceitos da programação.

License

Notifications You must be signed in to change notification settings

MrRioja/nodejs-api-solid

Repository files navigation

NodeJS - API SOLID 💻

GitHub top language GitHub last commit

SobreAPI SOLIDInstalaçãoTecnologiasAutor

Sobre

Projeto desenvolvido durante o módulo III do bootcamp Ignite da Rocketseat cujo objetivo foi utilizar na pratica conceitos do SOLID, design patterns, Docker, JWT, Refresh Token, RBAC e outros conceitos da programação.

API SOLID

Para utilizar conceitos do SOLID, Design Patterns, Docker, JWT e Refresh Token, RBAC e diversos outros conceitos, surgiu esse projeto que é uma aplicação para check-ins em academias.

Capitulo 1 - Estrutura do projeto

Nesse capitulo foi definida a estrutura inicial do projeto e foram realizadas algumas configurações iniciais. As tarefas realizadas foram:

  • Definição dos requisitos e das regras da aplicação.
  • Criação do projeto com NodeJS.
  • Adição de arquivo de configuração para salvar versões exatas do NPM.
  • Configuração das variáveis ambiente.
  • Configuração do ESLint.
  • Criação de aliases de importação.

Capitulo 2 - Integração com Prisma ORM

O objetivo desse capitulo foi integrar o Prisma no nosso projeto recém criado, lidando com todos os detalhes de configuração, definição dos modelos do nosso banco de dados e a conexão com o PostgresSQL, além do uso de Docker e Docker compose para criação de toda infraestrutura necessária. Abaixo as tarefas realizadas:

  • Conceitos básicos do Prisma ORM.
  • Conceitos básicos do Docker.
  • Como utilizar Postgres com Docker.
  • Como utilizar o Docker Compose.
  • Criação do schema do Prisma.
  • Definição dos relacionamentos entre os modelos do banco.

Capitulo 3 - Caso de uso e design patterns

Aqui iniciamos a criação dos casos de uso da aplicação e a aplicação de alguns patterns para facilitar a implementação da API proposta e torna-la mais manutenível. As etapas desse capitulo foram:

  • Criação do caso de uso para criar usuários.
  • Implementação do controller de criação de usuários.
  • Como criar hash e validar a senha do usuário.
  • Criação do caso de uso de registro.
  • Aplicação do Repository Pattern.
  • Aplicação de inversão de dependências.
  • Definição da interface do repositório.
  • Tratamento de erros provenientes do caso de uso.
  • Implementação de handler de erros global.

Capitulo 4 - Design Patterns & Testes

Durante essa etapa outros design patterns foram aplicados e testes unitários foram adicionados na aplicação. Além da escrita de testes também foram adicionadas e configuradas algumas ferramentas para criação e visualização de coverage de testes. A seguir a sequencia seguida nesse capitulo:

  • Configuração do Vitest.
  • Implementação de testes unitários.
  • Criação de In-Memory databases.
  • Configuração para gerar coverage de testes.
  • Configuração para utilizar a UI do Vitest.

Capitulo 5 - Implementando casos de uso

Nesse capitulo os demais casos de uso da API foram implementados para finalizar essa etapa do desenvolvimento da aplicação. Abaixo uma lista de tarefas realizadas:

  • Criação do caso de uso de autenticação.
  • Implementação de testes e do controller de autenticação.
  • Refatoração de criação de instâncias nos testes.
  • Aplicação do Factory Pattern.
  • Criação do caso de uso de perfil.
  • Criação do caso de uso de check-in.
  • Apresentação e prática do conceito de TDD e Mocking.
  • Adição da validação da data do check-in.
  • Validação da distância do check-in.
  • Criação do caso de uso de criação de academia.
  • Criação do caso de uso de histórico de check-ins.
  • Criação do caso de uso de métricas do usuário.
  • Criação do caso de uso de busca de academias.
  • Criação do caso de uso de academias próximas.
  • Criação do caso de uso de validação de check-in.
  • Validação de horário do check-in.

Capitulo 6 - Controllers & Testes E2E

Durante esse capitulo o foco foi criar os controllers restantes da aplicação e criar testes E2E para os endpoints. Para executar os testes foram realizadas algumas configurações adicionais para assegurar o funcionamento adequado da bateria de testes. Mais detalhes das tarefas realizas podem ser vistos na lista abaixo:

  • Implementação dos repositórios do Prisma.
  • Criação do repositório de academias.
  • Criação das factories dos casos de uso.
  • Apresentação de conceitos de autenticação com JWT.
  • Implementação de JWT no Fastify.
  • Implementação do controller de perfil.
  • Criação do teste environment.
  • Organização dos scripts do NPM.
  • Test Environment do Prisma.
  • Criação dos testes E2E do registro.
  • Criação dos testes E2E da autenticação.
  • Criação dos testes E2E do perfil.
  • Implementação do controller de criação de academia.
  • Criação dos controllers restantes de academia.
  • Implementação dos controllers de check-ins.
  • Criação dos testes E2E das rotas de academias.
  • Criação dos testes E2E das rotas de check-ins.

Capitulo 7 - Refresh Token & RBAC

O assunto abordado aqui foram os conceitos de refresh token e RBAC. O intuito foi entender o funcionamento de cada um deles e como implementa-los. Abaixo a lista de tarefas realizadas ao decorrer do capitulo:

  • Entendimento do fluxo de refresh token.
  • Implementação do refresh token.
  • Autorização por cargos aplicando o RBAC.
  • Criação de testes do RBAC.

Capitulo 8 - CI/CD da aplicação

Por fim, o ultimo capitulo teve como objetivo a criação de esteiras de CI e CD da nossa API. Mais especificamente foram criadas esteiras para execução dos testes unitários e E2E utilizando Github Actions. Abaixo as tarefas realizadas nessa etapa:

  • Execução de testes unitários no CI.
  • Execução de testes E2E no CI.

As requisições para testar a API estão disponíveis no botão abaixo e o link para acessar a API no ar está na descrição do repositório:

Run in Insomnia

Instalação

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Git, Node.js e Docker. Além disso é bom ter um editor para trabalhar com o código como VSCode.

🎲 Rodando o Back End (servidor)

# Clone este repositório
$ git clone git@github.com:MrRioja/nodejs-api-solid.git

# Acesse a pasta do projeto no terminal/cmd
$ cd nodejs-api-solid

# Instale as dependências
$ npm install
# Caso prefira usar o Yarn execute o comando abaixo
$ yarn

# Execute a aplicação em modo de desenvolvimento
$ npm run start:dev
# Caso prefira usar o Yarn execute o comando abaixo
$ yarn start:dev

# Execute os testes unitários da aplicação
$ npm run test
# Caso prefira usar o Yarn execute o comando abaixo
$ yarn test

# Execute os testes E2E da aplicação
$ npm run test:e2e
# Caso prefira usar o Yarn execute o comando abaixo
$ yarn test:e2e

# O servidor iniciará na porta 3333 ou na porta definida no arquivo .env na variável PORT - acesse <http://localhost:3333>

Tecnologias

Techs

Autor

Luiz Rioja

Backend Developer

LinkedIn GitHub Gmail WhatsApp Skype

About

Projeto desenvolvido durante o módulo III do bootcamp Ignite da Rocketseat cujo objetivo foi utilizar na pratica conceitos do SOLID, design patterns, Docker, JWT, Refresh Token, RBAC e outros conceitos da programação.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published