Esse é o teste técnico realizado para o processo seletivo da Bexs.
- 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 :)
- 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.
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.
- Faça uma requisição get para a rota http://localhost:3000/api/route/get?from={FROM}&to={TO}.
- 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}
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:
- Rode o comando
npm run test
e verá o resultado dos testes realizados.
- Rode o comando
npm install
para instalar as dependências do projeto. - Rode o comando
npm run test
para ver o resultado dos testes.