Backend corporativo · Java 17 · Spring Boot 3

Gestão de contratos
com fluxo automático de vigência.

API REST robusta para empresas que precisam controlar contratos, fornecedores e vencimentos sem depender de planilhas. Status dinâmico, autenticação JWT, validação de CNPJ e job diário de expiração.

17+
Endpoints REST
100%
Cobertura de DTOs
JWT
Auth stateless
3
Camadas (MVC)
O que entrega

Features de produção, não de tutorial.

📑

Ciclo de vida completo

CRUD de contratos com status dinâmico (ATIVO · VENCENDO · VENCIDO · SUSPENSO) calculado em tempo de leitura conforme a vigência.

🏢

Fornecedores com CNPJ válido

Validação de CNPJ via @CNPJ customizado (algoritmo dos dígitos verificadores) + unicidade no banco. Exclusão bloqueada se houver contratos ativos.

Scheduler de vencimento

Job @Scheduled diário às 00:00 marca como VENCIDO todo contrato cuja dataFim passou. Logs estruturados de cada execução.

🔐

JWT + BCrypt

Autenticação stateless com filtro JWT customizado, senhas hasheadas com BCrypt e SecurityConfig liberando apenas endpoints públicos.

📊

Dashboard agregado

Endpoint /dashboard com totais por status, contratos vencendo em 30 dias e valor consolidado da carteira — feito em uma única query.

📖

Swagger UI interativo

Documentação OpenAPI 3 com exemplos, schemas e botão Authorize pra colar o JWT e testar tudo direto do navegador.

Tech Stack

Tecnologias maduras, sem hype.

Java 17Linguagem
Spring Boot 3.5Framework
Spring SecurityAuth
Spring Data JPAORM
MySQL 8Banco
FlywayMigrations
JWT (jjwt)Token
MapStructMappers
LombokBoilerplate
Bean ValidationValidação
SpringDoc OpenAPISwagger
JUnit 5 + MockitoTestes
DockerContainer
MavenBuild
H2Local DB
LogbackLogs
API REST

Endpoints sob /api/v1

Público Autenticação
POST /auth/register Cria novo usuário
POST /auth/login Retorna JWT
JWT Fornecedores
POST /fornecedores Cadastra fornecedor
GET /fornecedores Lista paginada
GET /fornecedores/{id} Detalhes
GET /fornecedores/{id}/contratos Contratos do fornecedor
DEL /fornecedores/{id} Exclui (se sem ativos)
JWT Contratos
POST /contratos Cria contrato
GET /contratos/{id} Detalhes + status dinâmico
GET /contratos/vencendo Vencendo em 30 dias
PUT /contratos/{id}/suspender Marca como SUSPENSO
JWT Dashboard
GET /dashboard Totais e métricas
// POST /api/v1/auth/login
{
  "email": "admin@nexus.com",
  "senha": "admin123"
}

// ← 200 OK
{
  "token": "eyJhbGciOiJIUzI1NiJ9...",
  "tipo": "Bearer",
  "expiraEm": 3600
}
Arquitetura

Camadas separadas, responsabilidade clara.

Controller
REST · DTOs · validação · códigos HTTP
Service
Regras de negócio · transações · status dinâmico
Repository
Spring Data JPA · queries customizadas
MySQL 8 · Flyway
Migrations versionadas · seed automático
🛡️ SecurityFilterChain → JwtAuthFilter intercepta toda requisição
🚨 GlobalExceptionHandler → ErrorResponse padronizado em PT-BR
ContratoScheduler → cron diário expira contratos
📦 MapStruct → Entity ⇄ DTO em tempo de compilação

Pronto pra ver o código?

Tudo open-source, com testes, Swagger e Docker. Roda local sem instalar nada além de Java.