É uma api com finalidade de consulta e cadastro de rotas de viagem buscando a melhor rota custo beneficio.
Para inicializar a aplicação é necessário informar o arquivo onde as rotas serão armazenadas, o conteúdo do arquivo deve seguir o padrão: ROTA,ROTA,VALOR
.
GRU,BRC,10
BRC,SCL,5
GRU,CDG,75
GRU,SCL,20
GRU,ORL,56
Caso desejemos viajar de GRU para CDG existem as seguintes rotas:
- GRU - BRC - SCL - ORL - CDG ao custo de $40
- GRU - ORL - CGD ao custo de $64
- GRU - CDG ao custo de $75
- GRU - SCL - ORL - CDG ao custo de $45
O melhor preço é da rota 1 logo, o output da consulta deve ser GRU - BRC - SCL - ORL - CDG.
Primeiro instale
as dependencias, faça o build
da aplicação e execute
o comando.
- Instalando a apicação e fazendo o build.
$ yarn && yarn build
- Executando a aplicação command-line e interagindo para pegar a melhor rota entre dois pontos.
$ yarn best-travel-route input-file.txt
? Por favor informe a rota desejada: GRU-ORL
A melhore rota encontrada: GRU-BRC-SCL-ORL > 15
Para rodar a aplicação Rest, execute o seguinte comando para levantar o servidor http.
$ yarn && yarn build && yarn start
{"message":"Server listening on port: 3000","level":"info","service":"bexs-travel-route","version":"1.0.0"}
Além da interface em command-line a aplicação possui uma API Rest, que disponibiliza dois endpoints:
POST http://localhost:3000/travel-route
.
curl --request POST \
--url http://localhost:3000/travel-route \
--header 'Content-Type: application/json' \
--data '{
"route": [
"PAT",
"ORL",
"CGD"
],
"price": 30
}'
GET http://localhost:3000/travel-route/best-route/{partida}/{destino}
.
curl --request GET \
--url http://localhost:3000/travel-route/best-route/GRU/ORL
A api Rest conta com uma documentação no formato Swagger na rota: http://localhost:3000/docs
com mais detalhes e caso esteja rodando a aplicação em http://localhost:3000
é possivel testar as rotas por lá.
O Projeto possui testes unitarios e de integração:
Testes unitarios
$ yarn test:unit
Testes de integração
$ yarn test:int
Rodando as 2 suites junto
$ yarn test
-
Foi utilizado:
nodeJs
,typescript
,jest
. -
Foi aplicado conceitos de
clean-architecture
,domain-driven-design
,solid
.