Sistema completo de simulação de entregas por drones urbanos com otimização inteligente, gerenciamento de estados, APIs RESTful e dashboard em tempo real.
- Gerenciamento de Drones: Criação, monitoramento e remoção de drones com capacidade, alcance e bateria
- Sistema de Pedidos: Criação e cancelamento de pedidos com localização, peso e prioridade
- Otimização Inteligente: Algoritmo que distribui pedidos entre múltiplos drones de forma eficiente
- Simulação em Tempo Real: Sistema de estados (Idle → Carregando → Em voo → Entregando → Retornando)
- Gerenciamento de Bateria: Bateria diminui com a distância percorrida
- Dashboard Moderno: Interface React com visualização em tempo real (atualização a cada 1 segundo)
- Estatísticas: Relatórios de desempenho e drone mais eficiente
- APIs RESTful: Endpoints completos para todas as operações
- Persistência SQLite: Dados persistem após reiniciar o servidor
- Testes Unitários: Cobertura de testes para modelos e utilitários
Backend: Node.js + Express + TypeScript + SQLite
Frontend: React + TypeScript + CSS3
Banco de Dados: SQLite 3 com better-sqlite3
Testes: Jest
- Node.js 18+ instalado
- npm ou yarn
Você precisa rodar 2 terminais diferentes ao mesmo tempo:
cd server
npm install
npm run devIsso inicia o Express na porta 3001 ⚙️
# Na raiz do projeto (em outro terminal)
npm install
npm startIsso inicia o React na porta 3000 🎨
- Dashboard: http://localhost:3000
- API: http://localhost:3001/api
- Health Check: http://localhost:3001/health
cd server
npm test
npm run test:coverage- Nome identificador
- Capacidade máxima de peso (kg)
- Alcance máximo (km)
- Bateria (inicia com 100%)
- Localização inicial: base (0, 0)
- Localização do cliente (coordenadas x, y)
- Destino de entrega (opcional, diferente da localização do pedido)
- Peso do pacote (kg)
- Prioridade (low, medium, high)
As entregas são criadas através da API usando o endpoint de otimização ou podem ser gerenciadas manualmente. O sistema distribui pedidos entre drones disponíveis considerando:
- Prioridade dos pedidos
- Disponibilidade de drones (idle + bateria > 20%)
- Capacidade e alcance dos drones
- Rota otimizada: Base → Pedido → Destino → Base
Estados dos drones:
IDLE → LOADING → FLYING → DELIVERING → RETURNING → IDLE
Durante o voo:
- Bateria diminui 1% por km
- Localização atualizada em tempo real
- Quando chega no destino: status muda para "delivered"
- Retorna à base e recarrega automaticamente
- Base (roxo): Localização de saída
- Pedido (laranja): Ponto onde pegar o pacote
- Destino (rosa): Ponto de entrega final
- Drone em Voo (azul): Se movimentando pela rota
- Rotas traçadas em tempo real
Veja o sistema em ação:
📹 Assista o vídeo do sistema de entregas
Demonstração do sistema funcionando
POST /api/orders- Criar novo pedido (comdeliveryLocationopcional)GET /api/orders- Listar todos os pedidosGET /api/orders/:id- Obter pedido específicoDELETE /api/orders/:id- Cancelar pedido
POST /api/drones- Criar novo droneGET /api/drones- Listar todos os dronesGET /api/drones/:id- Obter drone específicoGET /api/drones/:id/status- Obter status detalhado do dronePOST /api/drones/:id/recharge- Recarregar bateriaDELETE /api/drones/:id- Remover drone (idle apenas)
POST /api/deliveries/optimize- Otimizar e criar entregasGET /api/deliveries- Listar todas as entregas (com filtro por status)GET /api/deliveries/:id- Obter entrega específicaGET /api/deliveries/:id/route- Obter rota da entregaGET /api/deliveries/stats- Estatísticas do sistema
POST /api/deliveries/simulate/start- Iniciar simulaçãoPOST /api/deliveries/simulate/stop- Parar simulaçãoPOST /api/deliveries/simulate/step- Executar um passo da simulaçãoPOST /api/deliveries/reset- Resetar todo o sistema
.
├── server/ # Backend Node.js/Express
│ ├── src/
│ │ ├── controllers/ # Controladores da API
│ │ ├── models/ # Modelos de dados
│ │ ├── services/ # Serviços (Otimização, Simulação)
│ │ ├── routes/ # Rotas da API
│ │ ├── types/ # Tipos TypeScript
│ │ ├── utils/ # Utilitários
│ │ └── __tests__/ # Testes unitários
│ └── package.json
├── client/ # Frontend React
│ ├── src/
│ │ ├── components/ # Componentes React
│ │ ├── services/ # Cliente API
│ │ └── types/ # Tipos TypeScript
│ └── package.json
└── package.json # Scripts
- Idle: Drone ocioso
- Loading: Carregando pacotes
- Flying: Em voo pela rota
- Delivering: Entregando pacotes
- Returning: Retornando à base
- Criação com capacidade e alcance personalizados
- Recarga automática de bateria na base
- Remoção apenas de drones ociosos
- Monitoramento em tempo real
- Prioriza por prioridade e tempo de criação
- Distribui entre múltiplos drones
- Agrupa pedidos quando necessário
- Seleciona drone com mais bateria
- Algoritmo Nearest Neighbor para rotas
- Armazenamento automático de todos os dados
- Recuperação automática ao reiniciar servidor
- Três tabelas: orders, drones, deliveries
- Modo WAL para melhor desempenho
curl -X POST http://localhost:3001/api/drones \
-H "Content-Type: application/json" \
-d '{
"name": "Drone Alpha",
"maxWeight": 10,
"maxDistance": 50,
"baseLocation": {"x": 0, "y": 0}
}'curl -X POST http://localhost:3001/api/orders \
-H "Content-Type: application/json" \
-d '{
"customerLocation": {"x": 10, "y": 20},
"deliveryLocation": {"x": 15, "y": 25},
"weight": 5,
"priority": "high"
}'curl -X POST http://localhost:3001/api/deliveries/simulate/start \
-H "Content-Type: application/json" \
-d '{"intervalMs": 1000}'Arquitetura modular com separação clara de responsabilidades:
- Controllers: Lidam com requisições HTTP
- Models: Lógica de dados
- Services: Contêm lógica de negócio complexa
- Routes: Definem endpoints da API
- Utils: Funções auxiliares reutilizáveis
Este projeto foi desenvolvido utilizando aproximadamente 30% de assistência de IA para geração de código inicial e estruturação, enquanto os 70% restantes foram resultado de pesquisas, implementação manual, testes, refatorações e decisões de arquitetura baseadas em estudos de algoritmos de otimização, padrões de design e melhores práticas de desenvolvimento.


