Skip to content

next-route/best-route

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚚[A Melhor Rota]

Para solucionar um problema que determina a melhor rota de um caminhão para carga e descarga de minério em uma mina aberta realizada através de uma malha de estradas localizadas dentro da mina, é necessário implementar um serviço que calcule o melhor trajeto que um caminhão precisará seguir para chegar ao seu destino.

🎯[Objetivos]

Implementar uma API que fornece operações necessárias para:

  • Cadastrar/Atualizar localização e status do caminhão.
  • Listar todos os caminhões com suas informações (localização e status).
  • Retornar a melhor rota para o destino final (escavadeira ou área de descarga) considerando a localização e status do caminhão.
  • Caso o caminhão esteja CHEIO(true), a melhor rota deve ser para a área de descarga mais próxima. Caso o caminhão esteja VAZIO(false), a melhor rota deve ser para a escavadeira mais próxima.

🗺️[Mina considerada no desafio]

  • Segmentos de estradas e direções permitidas para o tráfego de caminhões

  • Pontos de localização

  • 3 escavadeiras

  • 3 áreas de descarga

    [OBS]: Os caminhões e suas localizações devem ser cadastrados/atualizados dinamicamente via API.


mapa_grapho

🧬[Requisitos]

Necessário ter instalado os seguintes aplicativos:

  • Python 3.8.10
  • MySQL 8.0
  • MySQL Workbench 8.0
  • Postman (ou qualquer outra ferramente para testar a API)

🔧[Instalação]

Para executar o código, deverá ser realizado alguns procedimentos de instalação e configuração do ambiente conforme orientações a seguir:

  1. Python3:
  • Para instalar o Python, você precisa baixar o instalador. Acesse o site oficial neste link, escolha o seu Sistema Operacional e execute o download da versão utilizada neste projeto (3.8.10).

  • Para verificar se a instalação do Python foi bem-sucedida, abra o terminal do seu sistema operacional e digite o seguinte comando:

    python --version
    
  • Este comando retornará a versão do python que está instalada em sua máquina:

    Python 3.8.10
    
  1. Dependências:
  • Para realizar a instalação do Flask, execute o comando:

    pip install Flask
    
    • Após isso, ainda será necessário a instalação da extensão SQLAlchemy do Flask, basta executar o seguinte comando:
      pip install -U Flask-SQLAlchemy
      
    • O Flask agora está instalado juntamente com sua extensão. Pode-se verificar a versão instalada executando o comando:
      flask --version
      
    • Este comando retornará a versão instalada, algo similar a:
      Flask 2.0.2
      
    • Com o Flask instalado, você pode seguir para o Guia de início rápido ou caso prefira, para a Documentação geral a fim de executar a API.
  • Próximo passo é instalar o MySQL Connector através do comando:

    pip install mysql-connector-python
    
    • Após execução deste comando, deverá ser exibido no terminal uma mensagem de Instalação completa com sucesso.
  • Seguiremos então para a instalação do NetworkX, biblioteca dedicada a grafos. Esse processo poderá levar alguns minutos a mais que os anteriores. Para prosseguir, execute o comando:

    pip install networkx
    
    • Concluído a instalação do NetworkX, você já poderá acessar o Tutorial para trabalhar com o mesmo.
  • Por fim, iremos instalar o pacote MatplotLib, executando o comando a seguir no Windows:

    python -m pip install -U matplotlib
    

    Caso esteja utilizando outro sistema operacional, você poderá recorrer ao tutorial de instalação para Outros Sistemas Operacionais no site oficial.


🛠️ [Como testar no seu computador]

Antes de realizar o teste, é necessário criar a tabela truck no MySQL. Abra o Workbench e rode o seguinte script a fim de criar o schema e a tabela do projeto:

CREATE DATABASE `melhor_rota` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
CREATE TABLE `truck` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `status` tinyint(1) DEFAULT NULL,
  `location` varchar(50) DEFAULT NULL,
  `destination` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

Para testar o funcionamento da API, utilizamos o Postman. No site oficial a aplicação pode ser instalada de acordo com o sistema operacional utilizado, ou a versão Web pode ser usada como alternativa. Para utilizar o Postman é preciso primeiramente executar o comando python .\app.py no terminal e como resposta será retornado algo semelhante a:

* Serving Flask app 'app' (lazy loading)
* Enviroment: production
    Use a production WSGI server instead
* Debug mode: off
* Running on http://127.0.0.1:5000/

Copie a url juntamente com a porta e cole no Postman, como mostrado na imagem abaixo:

url postman

Cada método possui um path correspondente que deverá vir após o /, vejamos os exemplos:

Exemplo POST

Para cadastrar um novo caminhão, a opção POST deve ser selecionada, justamente com a URL abaixo. Os dados do caminhão devem ser informados no Body, onde a opção raw deve ser escolhida, e o formato do texto deve ser modificado para JSON.

http://127.0.0.1:5000/truck

post

Exemplo GET

O método GET é apenas para consulta, portanto nada será inserido no Body.

http://127.0.0.1:5000/trucks (retorna todos os caminhões cadastrados)

http://127.0.0.1:5000/truck/1 (retorna o caminhão especificado pelo seu id na url)

get

Exemplo GET melhor rota

Por meio da url path/id, podemos selecionar um caminhão por meio de seu id na url, e será retornada a melhor rota a ser seguida conforme a localização previamente informada.

http://127.0.0.1:5000/path/8

path

Exemplo PUT

Assim como o POST, o método PUT necessita que dados sejam informados no Body de forma a atualizar as informações de um caminhão específico selecionado pelo seu id.

http://127.0.0.1:5000/truck/8

put

Exemplo DELETE

Neste método apenas o id do caminhão que será excluído deve ser informado na url.

http://127.0.0.1:5000/truck/8

delete


✏️ [Autores]


🧭 [Mentores]


⚖️ [Licença]

Este projeto está sob a licença MIT.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages