Challenge Bexs
Descrição
Esse é o teste técnico realizado para o processo seletivo da Bexs.
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 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 chamada http de fato.
- 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).
- Decidi 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 :)
Como rodar o projeto?
- Renomeie o arquivo
example.env
para.env
. - Rode o comando
docker build . --build-arg ROUTE_PATH=input-routes.csv -t wricke/bexs_challenge
para gerar uma imagem do docker. - Rode o comando
docker-compose up
para subir o container em tempo real.
Como testar as rotas da aplicação?
Para realizar os testes, é necessário usar algum aplicativo que faça requisições. Eu recomendo fortemente o Insomnia ou o Postman caso você prefira um app com interface. Caso faça mais o estilo "old school" e prefira usar o terminal, recomendo o cURL.
Como calcular a rota mais curta?
- Faça uma requisição get para a rota http://localhost:3000/api/route/get?from={FROM}&to={TO}.
Como adicionar uma nova rota?
- Faça uma requisição post para a rota http://localhost:3000/api/route/add e escreva um texto na requisição no modelo {FROM},{TO},{VALUE}
Como rodar os testes
Nessa aplicação, foram escritos testes apenas para as funções essencias da aplicação, ou seja, não foram escritos testes para a camada de "interface" (contato externo) da aplicação, apenas para testar o funcionamento do algoritmo de dijkstra.
Para rodar esses testes, siga as instruções:
Se já tiver buildado a imagem do docker
- Rode o comando
npm run test
e verá o resultado dos testes realizados.
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.