Challenge Delivery Much
Descrição
Esse é o teste técnico realizado para o processo seletivo da Delivery Much.
Explicação arquitetural
- Optei pelo máximo de desacomplamento possível, para isso utilizei programação modular (com isso posso modificar módulos e isso não vai interferir no funcionamento final da aplicação, contanto que eu não quebre o contrato das classes/interfaces implementadas).
- Dentro dos módulos, escolhi separar por controller, service, repository e um arquivo pras rotas.
- Talvez soe repetitivo e algumas pessoas optariam por juntar controller e service, mas eu prefiro manter com a separação atual pois na service posso tratar de transformações nos objetos e executar as regras de negócio (por exemplo), enquanto na controller eu me preocupo apenas com a camada http.
- Optei também por não juntar o arquivo de rotas com a controller pois assim acho que fica mais fácil desacopar, pois caso eu queira usar outro framework para servir http (como o Fastify por exemplo), eu apenas preciso manter o contrato da função (parseando os tipos dos parâmetros passados para a função existente na controller).
Optei por não usar nenhum banco de dados ou sistema de cache pois isso iria apenas aumentar a complexidade da aplicação desnecessariamente. Caso isso se faça necessário, graças a programação modular e a forma que o código foi escrito implementar um banco de dados será muito fácil :)- Decidi implementar cache com redis para melhorar o tempo de resposta da rota de receitas. Enquanto uma requisição comum dura cerca de 3384.413ms, uma requisição com redis dura menos de 9.033ms.
Requisitos
É necessário ter o docker e o docker-compose instalados na sua máquina.
Como rodar o projeto?
- Renomeie o arquivo
example.env
para.env
e preenchendo as variáveis da forma necessária. - Rode o comando
docker build . -t wricke/delivery_much_challenge
para gerar uma imagem do docker. - Rode o comando
docker-compose up
para subir o container em tempo real.
Como rodar os testes
Se já tiver buildado a imagem do docker
- Rode o comando
npm run test
e verá o resultado dos testes realizados ounpm run test:watchAll
para rodar os testes com a flag --watchAll ativada.
Se ainda não tiver buildado a imagem do docker, rode o comando
- Rode o comando
npm install
para instalar as dependências do projeto. - Rode o comando
npm run test
para ver o resultado dos testes ounpm run test:watchAll
para rodar os testes com a flag --watchAll ativada.