Esta é uma API Gateway (REST) desenvolvida com o intuito de gerenciar registros de abastecimentos de veículos. O sistema atua como uma interface para o "Data Lake" do setor de transportes nacional, permitindo o cadastro, persistência e consulta de dados de forma eficiente e segura.
- Python 3.10+: Linguagem base do projeto.
- FastAPI: Framework moderno, rápido (high-performance) e baseado em type hints.
- SQLAlchemy: ORM para mapeamento e manipulação do banco de dados.
- Alembic: Gerenciamento de versões e migrações do banco de dados.
- Docker & Docker Compose: Containerização total para garantir que o projeto rode em qualquer ambiente.
- Pydantic: Validação de dados e definição de schemas.
- Pytest: Framework para execução de testes unitários.
Todos os requisitos mínimos do projeto foram implementados, tal como a ingestão de dados, consulta e relatórios e a elaboração de um script de carga, além das funções bônus também requisitadas:
- Testes Automatizados (Pytest): Implementação de testes unitários simples.
- Padronização de Código (Linters): Configuração por Ruff para garantir a formatação automática do código.
- Health Check: Criação de um endpoint GET /health que retorne status 200 e informações.
- Autenticação: Proteção da rota de Ingestão (POST) com um Token simples ou API Key.
A aplicação foi desenhada em camadas para facilitar a manutenção e a testabilidade:
-
Camada de Entrada (API/V1): gerencia as requisições HTTP e injeção de dependências.
-
Camada de Negócio (Services): residem as regras de validação e lógica principal.
-
Camada de Dados (DB): responsável pela persistência e mapeamento objeto-relacional.
-
Camada de Validação (Schemas): garante que os dados sejam validados.
├── alembic/ # Histórico e scripts de migração do banco
├── app/
│ ├── api/v1/ # Rotas da API e gerenciamento de dependências (API-KEY)
│ ├── db/ # Modelos SQLAlchemy e configuração da sessão
│ ├── schemas/ # Modelos Pydantic para serialização e validação
│ └── services/ # Lógica de negócio e comunicação com o banco
├── scripts/ # Scripts utilitários (Teste de carga)
│ └── load_data.py
├── tests/unit # Suíte de testes unitários para os serviços
│ └── test_abastecimento_service.py
├── main.py # Ponto de entrada (Setup do FastAPI)
├── Dockerfile # Configuração da imagem da aplicação
├── docker-compose.yml # Orquestração da aplicação
└── requirements.txt # Lista de dependências
- Subir Ambiente com Docker
# Constrói as imagens e sobe os containers
docker compose up --build
- Aplicar Migrações do Banco
# Configurado para migrar quando inicializado o conteiner.
- Executar Testes Unitários
docker compose run --rm -e PYTHONPATH=. app python -m pytest
- Executar Script de Carga (Opcional)
# Configurado para rodar quando inicializado o conteiner.
docker compose run --rm app python scripts/load_data.py