Sistema de rastreamento de veículos em tempo real baseado em arquitetura orientada a eventos.
O TrackFlow é uma API backend que simula o sistema de rastreamento de frota de uma empresa de logística. Dispositivos GPS instalados nos veículos enviam periodicamente suas coordenadas, e o sistema processa essas informações de forma assíncrona, armazenando o histórico e gerando alertas automáticos.
O projeto foi desenvolvido com foco educacional, com o objetivo de consolidar na prática conceitos de mensageria, bancos NoSQL, processamento assíncrono e arquitetura orientada a eventos (EDA).
Não há frontend. Toda comunicação ocorre via API REST.
O sistema segue o padrão Event-Driven Architecture (EDA). A API nunca persiste localizações diretamente — ela valida os dados recebidos, publica um evento na fila e retorna imediatamente. O processamento acontece de forma assíncrona via consumers.
GPS Device → FastAPI → RabbitMQ → Consumer → MongoDB
| Fila | Responsabilidade |
|---|---|
gps.location.received |
Recebe novas localizações publicadas pela API |
gps.location.dlq |
Dead Letter Queue — armazena mensagens que falharam no processamento |
├── Routes → Recebe requisições HTTP e retorna respostas
├── Services → Contém regras de negócio e orquestra operações
└── Repositories → Responsável pela comunicação com o banco de dados
| Categoria | Tecnologia |
|---|---|
| Linguagem | Python 3.13+ |
| Framework | FastAPI + Pydantic |
| Mensageria | RabbitMQ + Pika |
| Banco de Dados | MongoDB + Motor (async) |
| Infraestrutura | Docker + Docker Compose |
{
"_id": "ObjectId",
"plate": "ABC1D23",
"model": "Volkswagen Delivery",
"active": true,
"created_at": "2026-06-24T10:00:00"
}{
"_id": "ObjectId",
"vehicle_id": "ObjectId",
"latitude": -20.443,
"longitude": -54.647,
"speed": 70,
"timestamp": "2026-06-24T10:00:00"
}{
"_id": "ObjectId",
"vehicle_id": "ObjectId",
"type": "SPEED_LIMIT_EXCEEDED",
"speed": 110,
"created_at": "2026-06-24T10:00:00"
}| Método | Rota | Descrição |
|---|---|---|
POST |
/api/v1/vehicles |
Cadastrar novo veículo |
GET |
/api/v1/vehicles |
Listar todos os veículos |
GET |
/api/v1/vehicles/{id} |
Buscar veículo por ID |
| Método | Rota | Descrição |
|---|---|---|
POST |
/api/v1/locations |
Receber nova localização (publica na fila) |
GET |
/api/v1/vehicles/{id}/last-location |
Última localização do veículo |
GET |
/api/v1/vehicles/{id}/history |
Histórico completo de localizações |
| Método | Rota | Descrição |
|---|---|---|
GET |
/api/v1/vehicles/{id}/alerts |
Listar alertas do veículo |
| Método | Rota | Descrição |
|---|---|---|
GET |
/health |
Health check da aplicação |
- Docker instalado
- Docker Compose instalado
git clone https://github.com/seu-usuario/trackflow.git
cd trackflowcp .env.example .envEdite o arquivo .env conforme necessário:
MONGO_URI=mongodb://mongo:27017
MONGO_DB=trackflow
RABBITMQ_URI=amqp://guest:guest@rabbitmq:5672/
SPEED_LIMIT=80docker compose up --buildA API estará disponível em http://localhost:8000.
A documentação interativa (Swagger) estará em http://localhost:8000/docs.
trackflow/
├── app/
│ ├── api/
│ │ └── v1/
│ │ ├── routes/
│ │ │ ├── vehicles.py
│ │ │ ├── locations.py
│ │ │ └── alerts.py
│ │ └── router.py
│ ├── core/
│ │ ├── config.py
│ │ └── exceptions.py
│ ├── db/
│ │ └── mongo.py
│ ├── messaging/
│ │ ├── publisher.py
│ │ └── consumer.py
│ ├── models/
│ │ ├── vehicle.py
│ │ ├── location.py
│ │ └── alert.py
│ ├── repositories/
│ │ ├── vehicle_repository.py
│ │ ├── location_repository.py
│ │ └── alert_repository.py
│ ├── services/
│ │ ├── vehicle_service.py
│ │ ├── location_service.py
│ │ └── alert_service.py
│ └── main.py
├── docker-compose.yml
├── Dockerfile
├── .env.example
├── requirements.txt
└── README.md
- Cadastro e gestão de veículos da frota
- Recebimento de coordenadas GPS via API REST
- Publicação de eventos no RabbitMQ (processamento assíncrono)
- Persistência de localizações via consumer
- Consulta de última localização e histórico por período
- Detecção automática de excesso de velocidade com geração de alertas
- Dead Letter Queue (DLQ) para mensagens com falha
- Retry automático no consumer
- Tratamento global de exceções
- Logging estruturado
- Containerização completa com Docker Compose
| Conceito | Como é aplicado no projeto |
|---|---|
| Event-Driven Architecture | A API publica eventos; consumers reagem a eles de forma independente |
| Mensageria com RabbitMQ | Desacoplamento entre produção e processamento de dados |
| Dead Letter Queue | Mensagens com falha são redirecionadas para a DLQ sem perda |
| MongoDB | Persistência flexível com collections para veículos, localizações e alertas |
| Processamento Assíncrono | A API responde imediatamente; consumers processam em background |
| Arquitetura em Camadas | Separação clara entre Routes, Services e Repositories |
| Princípios SOLID | Responsabilidade única e inversão de dependência nas camadas |
| Containerização | Todos os serviços sobem com um único docker compose up |
Este projeto está sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.