Aplicação web para controle e gerenciamento de motoristas e operações em pátios logísticos.
Este repositório contém o backend em Spring Boot, a camada estática (HTML/CSS/JS) usada pela interface e arquivos de configuração para execução local e em container.
- CRUD de motoristas (criar, listar, buscar por id, atualizar, deletar).
- Endpoints públicos para verificação (por exemplo: verificar CPF) e listagens.
- Autenticação de usuários com JWT (login e registro).
- Front-end estático (páginas em
src/main/resources/static/e templates emsrc/main/resources/templates/).
- Backend: Java 21, Spring Boot, Spring Data JPA
- Banco de dados: PostgreSQL (configurável via variáveis de ambiente)
- Autenticação: JWT (biblioteca auth0)
- Build: Maven (uso do wrapper
./mvnw) - Contêiner: Docker / docker-compose
src/main/java/com/example/controlPatio/— Código fonte (controllers, services, entities, repositories, config)src/main/resources/application.yaml— Configurações da aplicação (variáveis suportadas via env vars)src/main/resources/static/— Arquivos estáticos (HTML, CSS, JS)src/main/resources/templates/— Templates Thymeleaf (ex.:login.html)pom.xml,Dockerfile,docker-compose.yml— build e orquestração
Observação: a rota base de cada controller segue o mapeamento definido nas classes.
-
Autenticação:
- POST /auth/login — autentica usuário e retorna JWT (envie JSON com username e password)
- POST /auth/register — registra novo usuário (envie dados necessários)
-
Motoristas (base: /motoristas):
- POST /motoristas/create — criar novo motorista
- GET /motoristas/verificar-cpf?cpf=... — verifica existência de CPF
- GET /motoristas/listaMotorista — listar todos os motoristas
- GET /motoristas/{id} — buscar motorista por ID
- DELETE /motoristas/{id} — deletar motorista
- PUT /motoristas/{id} — atualizar motorista
- GET /motoristas/listaPorStatus/{status} — listar por status (ex.: PENDENTE, ENTREGUE)
- PUT /motoristas/moverParaExpedicao/{id}/{status} — atualiza status do motorista
Algumas rotas estáticas e de registro/login são permitidas sem autenticação pela configuração de segurança.
- A aplicação gera tokens JWT via
TokenServicee os valida noSecurityFilter. - Token expira em 2 horas por padrão.
- A chave usada para assinar tokens vem da propriedade
api.security.token.secret— por padrão lida deJWT_SECRET(variável de ambiente) ou do valor padrão declarado emapplication.yaml.
A aplicação lê as configurações do application.yaml, com suporte a variáveis de ambiente. Principais variáveis a configurar:
- DATABASE_URL — URL JDBC do PostgreSQL (ex.: jdbc:postgresql://host:5432/dbname)
- DATABASE_USERNAME — usuário do banco
- DATABASE_PASSWORD — senha do banco
- JWT_SECRET — segredo usado na assinatura dos tokens JWT
Exemplo (bash):
export DATABASE_URL=jdbc:postgresql://localhost:5432/controlpatio
export DATABASE_USERNAME=postgres
export DATABASE_PASSWORD=senha
export JWT_SECRET=uma-chave-secreta
./mvnw spring-boot:run- Rodando localmente (usar o wrapper do Maven):
./mvnw spring-boot:run- Usando Docker Compose (build + up):
docker-compose up --buildApós subir, a aplicação fica acessível em http://localhost:8080/. A página de login/template está em /login ou via static dependendo do servidor (ex.: http://localhost:8080/login.html).
- Registrar usuário:
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"Fulano","username":"fulano","email":"fulano@ex.com","password":"senha","role":"ROLE_USER"}' \
http://localhost:8080/auth/register- Login (recebe token):
curl -X POST -H "Content-Type: application/json" \
-d '{"username":"fulano","password":"senha"}' \
http://localhost:8080/auth/login- Criar motorista (exemplo — se sua rota exigir auth, envie Authorization: Bearer ):
curl -X POST -H "Content-Type: application/json" \
-d '{"nome":"Motorista Ex","cpf":"00000000000","placa":"ABC1234"}' \
http://localhost:8080/motoristas/create- A segurança já possui suporte a JWT; ajuste o
JWT_SECRETem produção e reveja as regras de autorização emSecurityConfigurations(hoje/motoristas/**está permitido publicamente). - Migrations/seed do banco não estão incluídos — a aplicação usa
spring.jpa.hibernate.ddl-auto=updatepor padrão. - Integrações externas (Twilio/WhatsApp) podem existir em rascunho; revise o código se for usar em produção.