Estrutura do Projeto
O FrotaNext é organizado como um monorepo lógico, onde a raiz contém a infraestrutura (Docker) e subpastas contêm os microsserviços independentes.
Esta estrutura facilita a execução de todo o ambiente com um único comando, mantendo a separação de responsabilidades.
📂 Visão Geral da Raiz
FrotaNext/
├── 🐳 docker-compose.yml # Orquestrador de todos os serviços e banco
├── 📄 .env # Variáveis de ambiente (não comitado)
├── 🐍 reset-popula.py # Script de automação para limpar e popular o banco
├── 🤖 teste_visual_completo.py # Script de teste E2E (Selenium)
│
├── 📁 backend/ # Microsserviço de Regras de Negócio (Core)
├── 📁 auth-api/ # Microsserviço de Autenticação
├── 📁 frontend/ # Aplicação Web (React)
└── 📁 docs/ # Esta documentação (MkDocs)
````
-----
## ⚙️ Backend Principal (`/backend`)
Responsável por toda a lógica de negócio de veículos, reservas e gerenciamento de frota. Segue uma arquitetura em camadas para organização.
```text
backend/
├── Dockerfile # Configuração da imagem Python
├── requirements.txt # Dependências (FastAPI, SQLAlchemy, etc.)
├── alembic.ini # Configuração de Migrações (se utilizado)
│
├── src/ # Código Fonte
│ ├── main.py # Ponto de entrada (App FastAPI e Configuração de CORS)
│ ├── database.py # Conexão com PostgreSQL (SessionLocal)
│ │
│ ├── 🛣️ routers/ # Controllers (Rotas da API)
│ │ ├── veiculo_router.py
│ │ ├── reserva_router.py
│ │ └── ...
│ │
│ ├── 🧠 services/ # Regras de Negócio (Lógica Pura)
│ │ ├── reserva_service.py # (Cálculo de multas, validação de datas)
│ │ └── veiculo_service.py
│ │
│ ├── 📦 models/ # Modelos do Banco (SQLAlchemy - ORM)
│ │ ├── veiculo.py # (Tabelas: veiculos, veiculos_passeio...)
│ │ ├── reserva.py
│ │ └── pessoa.py # (Modelos compartilhados de Pessoa)
│ │
│ └── 📑 schemas/ # Schemas de Validação (Pydantic)
│ ├── reserva_schema.py # (Input/Output da API)
│ └── ...
│
└── tests/ # Testes Automatizados
├── conftest.py # Fixtures do Pytest (Setup do Banco)
├── test_unit_*.py # Testes Unitários (Mockados)
└── test_int_*.py # Testes de Integração (Com banco real)
🔐 Auth Service (/auth-api)
Serviço leve e isolado, focado exclusivamente em identidade e tokens JWT.
auth-api/
├── Dockerfile
├── src/
│ ├── main.py # Inicialização do serviço
│ ├── seguranca.py # Lógica de Hash (Argon2) e criação de JWT
│ │
│ ├── routers/ # Rotas de Login e Cadastro
│ │ ├── auth_router.py # (Endpoint /token)
│ │ └── ...
│ │
│ └── services/ # Validações de usuário
└── tests/ # Testes específicos de autenticação
💻 Frontend (/frontend)
Aplicação SPA construída com Vite e React.
frontend/
├── Dockerfile # Build do Node.js
├── index.html # Entry point do HTML
├── tailwind.config.js # Configuração de Estilos
│
└── src/
├── main.tsx # Renderização do React
├── App.tsx # Rotas principais (React Router)
│
├── 🧱 components/ # Componentes Reutilizáveis
│ ├── ui/ # (Botões, Modais, Cards, Inputs)
│ └── layout/ # (Navbar, Sidebar, Footer)
│
├── 📄 pages/ # Telas da Aplicação
│ ├── public/ # (Home, Login, Cadastro)
│ ├── client/ # (Dashboard, Minhas Reservas)
│ └── admin/ # (Gestão de Frota, Reservas)
│
├── 🔌 services/ # Comunicação com Backend (Axios)
│ ├── api.ts # Instância do Axios com Interceptors
│ └── authService.ts # Chamadas para Auth API
│
└── 🎨 assets/ # Imagens e ícones
🗄️ Banco de Dados
O banco PostgreSQL não possui pasta de código, pois roda a partir de uma imagem oficial Docker. Seus dados persistem no volume frota_pg_data (gerenciado pelo Docker).
As tabelas são criadas automaticamente pelo SQLAlchemy ao iniciar o Backend Principal (no arquivo backend/src/main.py).