Sobre • API SOLID • Instalação • Tecnologias • Autor
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.
# 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>