Skip to content

IgorVVieira/marvel-api-clean-arch

Repository files navigation

Marvel Api Clean Architecture

💻 Tencologias utilizadas

Resumidamente, este teste foi desenvolvido utilizando Node.js com o framework NestJS e banco de dados SQLITe em memória, seguindo os princípios da clean architecture e do SOLID. O Docker foi utilizado para criar uma imagem padrão, facilitando os testes e garantindo consistência entre os ambientes. Para realizar os testes unitários, foi utilizado o Jest, enquanto o Swagger foi empregado para criar uma documentação e uma forma mais simples de testar a API.

🛠️ Requisitos de execução/instalação

Para rodar este projeto, precisa ter o node ou Docker instalado em sua máquina. Se não tem o Docker ou Node instalado, pode encontrá-los no site oficial para download: Docker, Node.js.

Instalação

  1. Clone o repositório em sua máquina:

    git clone https://github.com/IgorVVieira/test_fpass_igorvvieira.git
  2. Mude para o diretório do projeto:

    cd test_fpass_igorvvieira
  3. Rode o projeto utilizando Docker Compose (Caso queira):

     docker build -t test_fpass_igorvvieira .
     docker run --name test_fpass_igorvvieira -p 3000:3000 test_fpass_igorvvieira
  4. Rode Node local:

      npm install
      npm run start:dev
  5. O projeto estará rodando em sua máquina na porta 3000.

Como testar

Para facilitar a realização dos testes e torná-los mais visualmente acessíveis, foi adicionada uma documentação do Swagger que permite testar todos os endpoints da API. Após instalar o projeto, você pode acessar a documentação em Documentação para explorar e testar os endpoints de forma mais fácil e interativa.

✨ Deploy

Com o objetivo de implementar novas funcionalidades além das requeridas no projeto, a aplicação foi implantada utilizando o Render, tornando-a disponível em Produção. Agora, é possível realizar todas as operações no endpoint, e os dados são persistidos em um banco em memória. O deploy é feito automaticamente sempre que um novo código é enviado para a branch master, garantindo um processo de implantação contínuo.

🧪 Rodar testes de unidade

Por padrão, a cada push em qualquer uma das branches deste projeto, os testes unitários serão executados automaticamente. Isso foi implementado por meio das actions do GitHub, garantindo que cada nova funcionalidade adicionada seja testada e verificada quanto a possíveis regressões, garantindo assim a integridade do código existente. Essa abordagem ajuda a assegurar que o novo código esteja correto e não cause problemas nas funcionalidades já existentes.

Para rodar os testes de forma manual usando Docker:

docker exec -it test_fpass_igorvvieira npm run test

Usando Node local

npm run test

🧪 Rodar testes End-to-End (E2E)

A aplicação possui dois controladores: FavoriteHeroesController e HeroesController. Para cada um deles, foram desenvolvidos dois testes end-to-end (E2E). No caso do FavoriteHeroesController, optou-se por utilizar um banco de dados SQLite, que é salvo localmente, especificamente para executar os testes de integração. Esse banco de dados de teste, localizado em Database Test, não interfere na aplicação principal, que continua a utilizar o banco em memória. Essa abordagem permite que os testes de integração sejam executados de forma isolada, garantindo a integridade dos dados da aplicação em produção.

Para rodar os testes e2e usando Docker:

docker exec -it test_fpass_igorvvieira npm run test:e2e

Usando Node local:

npm run test:e2e

🎉 Requisitos funcionais

Além dos requisitos mencionados no desafio, decidi implementar algumas regras de negócio, validações relevantes e melhorias, que incluem:

  • Possível favoritar um herói da Marvel.
  • Possível buscar herói por nome (completo ou parcial).
  • Possível remover um herói dos favoritos.
  • Possível listar todos heróis favoritos.
  • Ao salvar um herói como favorito, também é armazenado um objeto JSON simples contendo os dados essenciais do herói, como nome e descrição. Isso facilita a busca e compreensão dos dados posteriormente.
  • Impedir a adição de um herói aos favoritos caso ele não exista na API da Marvel.
  • Evitar que o mesmo herói seja adicionado como favorito duas vezes.
  • Não permitir a remoção de um herói dos favoritos se ele não estiver presente na lista de favoritos.
  • Por consequência, não é possível excluir um herói favorito que não está presente na API da Marvel.
  • Realização de deploy simplificado para produção.
  • Utilização de ambiente Docker para executar o projeto.
  • Documentação completa da API.
  • Implementação de testes unitários.
  • Implementação de testes de integração.

Todas essas funcionalidades adicionais, além dos requisitos obrigatórios, foram implementadas e estão cobertas por testes de unidade e integração.

About

Projeto utilizando clean architecture para consumir api da marvel

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published