https://github.com/marioidival/delivering_goods.git
Uma rede grande de varejo esta desenvolvendo um novo sistema de logística e sua ajuda é muito importante neste momento. Sua tarefa será desenvolver o novo sistema de entregas visando sempre o menor custo. Para popular sua base de dados o sistema precisa expor um web service que aceite o formato de malha logística (exemplo abaixo), nesta mesma requisição o requisitante deverá informar um nome para este mapa. É importante que os mapas sejam persistidos para evitar que a cada novo deploy todas as informações desapareçam. O formato de malha logística é bastante simples, cada linha mostra uma rota: ponto de origem, ponto de destino e distância entre os pontos em quilômetros.
A B 10
B D 15
A C 20
C D 30
B E 50
D E 30
Com os mapas carregados o requisitante irá procurar o menor valor de entrega e seu caminho, para isso ele passará o mapa, nome do ponto de origem, nome do ponto de destino, autonomia do caminhão (km/l) e o valor do litro do combustível, agora sua tarefa é criar este web service. Um exemplo de entrada seria, mapa SP, origem A, destino D, autonomia 10, valor do litro 2,50; a resposta seria a rota A B D com custo de 6,25.
O problema foi solucionado usando as seguintes tecnologias (e algoritmo):
cd delivering_goods/
# A aplicação ficará em background
docker-compose up -d
# Ira executar os migrations
docker-compose run web python manage.py migrate
# Exemplo com httpie
http localhost:8000/api/map name='SP' mesh='A B 10 B D 15 A C 20 C D 30 B E 50 D E 30'
HTTP/1.0 201 Created
Allow: POST, OPTIONS
Content-Type: application/json
Date: Thu, 08 Dec 2016 21:09:35 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN
{
"id": 5,
"mesh": "A B 10 B D 15 A C 20 C D 30 B E 50 D E 30",
"name": "SP"
}
# Exemplo com httpie
http localhost:8000/api/mesh map=='SP' root=='A' destination=='D' autonomy=='10' gas=='2.50'
HTTP/1.0 200 OK
Allow: GET, OPTIONS
Cache-Control: max-age=900
Content-Type: application/json
Date: Thu, 08 Dec 2016 21:12:24 GMT
Expires: Thu, 08 Dec 2016 21:27:24 GMT
Last-Modified: Thu, 08 Dec 2016 21:12:24 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN
{
"mesh": "Route A B D coast 6.25"
}