API REST desenvolvida para gerenciar implantações de sistemas, controle de versões, conexões remotas e usuários em um ambiente centralizado.
Este projeto nasceu da necessidade real do setor de TI em cartórios e serventias, visando substituir controles manuais em planilhas por uma plataforma estruturada, segura e escalável para gerenciar diferentes ambientes de cliente.
Centralizar o gerenciamento de:
- 👥 Clientes (Cartórios/Serventias) - com dados de acesso ao servidor e banco
- 📦 Versões do Sistema - com histórico e changelog detalhado
- 🔐 Conexões Remotas - TeamViewer, AnyDesk, AnyViewer
- 👤 Usuários e Autenticação - com sistema de roles e JWT
- 📊 Rastreabilidade - auditoria com timestamps de criação
O projeto segue uma arquitetura em camadas bem definida com separação clara de responsabilidades:
HTTP Request
↓
[Controller Layer] - Recebe requisições, valida entrada
↓
[Service Layer] - Implementa lógica de negócio
↓
[Repository Layer] - Acessa dados via JPA/Hibernate
↓
[Database Layer] - PostgreSQL com versionamento Flyway
Organização dos pacotes por domínio:
com.hugojanuario.deploy_manager/
├── domain/
│ ├── client/ # Entidade Cliente
│ │ └── dto/ # DTOs de request/response
│ ├── version/ # Entidade Versão
│ │ └── dto/
│ ├── connection/ # Entidade Conexão Remota
│ │ └── dto/
│ └── user/ # Entidade Usuário
│ └── dto/
├── controller/ # REST Controllers
├── service/ # Lógica de negócio
├── repository/ # Data Access (Spring Data JPA)
├── infra/
│ └── security/ # JWT, autenticação, filtros
└── DeployManagerApplication.java
Após iniciar a aplicação, acesse a documentação interativa em:
👉 http://localhost:8080/swagger-ui/index.html
Aqui você pode visualizar todos os endpoints, modelos de dados e testar requisições em tempo real.
- JDK 21 instalado
- Maven instalado (ou usar o wrapper
mvnwdo projeto) - PostgreSQL rodando localmente
-
Configurar o banco de dados
- Certifique-se que o PostgreSQL está rodando em:
jdbc:postgresql://localhost:5432/postgres- Usuário:
user - Senha:
secret
- Esses valores podem ser ajustados em
src/main/resources/application.properties.
- Certifique-se que o PostgreSQL está rodando em:
-
Rodar as migrations e subir a aplicação No diretório raiz do projeto (
deploy-manager), execute:./mvnw spring-boot:run
Ou, se tiver Maven instalado globalmente:
mvn spring-boot:run
-
Rodar pelo IntelliJ IDEA
- Importe o projeto como Maven Project
- Aguarde o download das dependências
- Abra a classe
DeployManagerApplication - Clique em Run na função
main
A API ficará disponível em: http://localhost:8080
clients
├── id (UUID) - Chave primária
├── name (VARCHAR) - Nome da serventia
├── city (VARCHAR) - Cidade
├── state (VARCHAR) - UF
├── contact (VARCHAR) - Telefone/contato
├── version_id (FK) - Versão atual instalada
├── user_machine_server (VARCHAR) - Usuário acesso servidor
├── password_machine_server (VARCHAR) - Senha servidor (criptografada)
├── user_db (VARCHAR) - Usuário banco de dados
├── password_db (VARCHAR) - Senha banco (criptografada)
├── active (BOOLEAN) - Status ativo/inativo
└── created_at (TIMESTAMP) - Data de criação (auditoria)
versions
├── id (UUID) - Chave primária
├── number_version (VARCHAR) - Número da versão (ex: 1.0.0)
├── date_release (DATE) - Data de lançamento
├── changelog (TEXT) - Detalhes das mudanças
├── active (BOOLEAN) - Versão ativa/arquivada
└── created_at (TIMESTAMP) - Data de criação (auditoria)
connections
├── id (UUID) - Chave primária
├── client_id (FK) - Cliente associado
├── connection_type (ENUM) - Tipo: TEAMVIEWER | ANYDESK | ANYVIEWER
├── id_remote_connection (VARCHAR) - ID/Código da conexão
├── password_remote_connection (VARCHAR) - Senha (criptografada)
└── created_at (TIMESTAMP) - Data de criação (auditoria)
users
├── id (UUID) - Chave primária
├── email (VARCHAR) - Email único
├── password (VARCHAR) - Senha (criptografada com BCrypt)
├── role_type (ENUM) - Perfil: ADMIN | IMPLANTACAO | VISUALIZADOR
├── active (BOOLEAN) - Usuário ativo/inativo
└── created_at (TIMESTAMP) - Data de criação (auditoria)
Client (Muitos) ──→ (Um) Version
Connection (Muitos) ──→ (Um) Client
- ✅ JWT (JSON Web Token) - Autenticação stateless
- ✅ Token expira em 2 horas - Renovação automática
- ✅ BCrypt - Senhas de usuários criptografadas
- ✅ Spring Security - Framework de segurança integrado
- ✅ Controle de Acesso por Roles - ADMIN | IMPLANTACAO | VISUALIZADOR
- ✅ Proteção de Endpoints - Validação de JWT em cada requisição
- ✅ SecurityFilter - Filtro customizado para validar tokens
- ✅ Credenciais criptografadas - Senhas de servidores e bancos
- ✅ Senhas remotas criptografadas - Credenciais de TeamViewer/AnyDesk
- ✅ Nenhum dado sensível em logs - Segurança de informações
- ✅ UUID como PK - Sem exposição de IDs sequenciais
POST /login
├── UserCreateRequest (email + password)
├── AuthenticationManager valida credenciais
├── TokenService gera JWT
└── Response: { "token": "jwt_token_aqui" }
Requisições subsequentes:
├── Header: Authorization: Bearer {token}
├── SecurityFilter extrai e valida token
├── User autenticado = acesso concedido
└── Token expirado/inválido = acesso negado (401)
- Java 21 - Linguagem principal
- Spring Boot 3.5.11 - Framework web
- Spring Data JPA - Persistência de dados
- Spring Security - Autenticação e autorização
- Spring Validation - Validação de requisições
- Auth0 Java JWT 4.2.1 - Geração e validação de tokens JWT
- BCrypt - Hash seguro de senhas (via Spring Security)
- PostgreSQL - Banco de dados principal
- Flyway 11.7.2 - Versionamento de migrations
- Hibernate - ORM (Object-Relational Mapping)
- SpringDoc OpenAPI 2.8.15 - Geração automática de Swagger/OpenAPI
- Spring Security Test - Testes de segurança
- Spring Boot Test - Testes unitários
- Lombok - Redução de boilerplate (getters, setters, constructors)
- Spring Boot DevTools - Reload automático em desenvolvimento
- Maven - Gerenciador de dependências e build
- Docker & Docker Compose - Containerização e orquestração
- IntelliJ IDEA 2025.3.2 - IDE de desenvolvimento
- macOS - Sistema operacional
- Zsh - Shell padrão
- Banco de dados relacional principal
- Suporte a UUID nativo
- Transações ACID
Todas as alterações no banco são rastreadas via migrations versionadas:
db/migration/
├── V1__create-table-versions.sql
├── V2__create-table-clients.sql
├── V3__create-table-connections.sql
├── V4__create-table-users.sql
└── V5__remove-column-username.sql
Configuração de Segurança:
spring.jpa.hibernate.ddl-auto=validatevalidategarante que o schema do banco corresponde às entidades JPA- Nenhuma alteração automática é aplicada (segurança em produção)
- Todas as mudanças são feitas via Flyway migrations
# Variaveis de ambiente
JDBC_DATABASE_URL: jdbc:postgresql://localhost:5432/postgres
DB_USER: user
DB_PASSWORD: secretO projeto utiliza Docker Compose para provisionar o ambiente completo de desenvolvimento.
- Docker e Docker Compose instalados
- Git para clonar o repositório
docker-compose up --buildIsso irá provisionar e executar:
- 🐘 PostgreSQL 16 (banco de dados)
- 🚀 API Spring Boot (aplicação)
docker-compose psA API ficará disponível em: http://localhost:8080
docker-compose downContém as configurações de:
- Imagem PostgreSQL
- Variáveis de ambiente (usuário, senha, database)
- Volumes persistentes
- Porta mapeada (5432)
- Healthcheck
POST /login
Content-Type: application/json
{
"email": "usuario@exemplo.com",
"password": "senha123"
}Resposta de sucesso (200):
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Nota: O token retornado deve ser enviado em todas as requisições subsequentes:
Authorization: Bearer {token}
POST /api/user- Criar novo usuárioGET /api/user- Listar usuários (paginado)GET /api/user/{id}- Obter usuário por IDPUT /api/user/{id}- Atualizar usuárioDELETE /api/user/{id}- Deletar usuário
POST /api/version- Criar nova versãoGET /api/version- Listar versõesGET /api/version/{id}- Obter versão por IDPUT /api/version/{id}- Atualizar versãoDELETE /api/version/{id}- Deletar versão
POST /api/client- Criar novo clienteGET /api/client- Listar clientesGET /api/client/{id}- Obter cliente por IDPUT /api/client/{id}- Atualizar clienteDELETE /api/client/{id}- Deletar cliente
POST /api/client/{clientId}/connection- Criar conexão para clienteGET /api/client/{clientId}/connection- Listar conexões do clienteGET /api/connection/{id}- Obter conexão por IDPUT /api/connection/{id}- Atualizar conexãoDELETE /api/connection/{id}- Deletar conexão
💡 Dica: Use o Swagger/OpenAPI em http://localhost:8080/swagger-ui/index.html para testar todos os endpoints interativamente!
✅ Versionamento de Banco - Flyway migrations organizadas e versionadas
✅ Docker & Docker Compose - Orquestração profissional do ambiente
✅ UUID como Chave Primária - Maior segurança e escalabilidade distribuída
✅ Arquitetura em Camadas - Separação clara e rigorosa de responsabilidades
✅ DTOs - Controle limpo de entrada e saída de dados
✅ Tratamento Global de Exceções - Exception handlers centralizados
✅ Enums Tipados - Padronização de tipos (Roles, ConnectionType)
✅ Spring Security & JWT - Autenticação e autorização robustas
✅ Validação com Bean Validation - Validações em tempo de requisição
✅ Dependência Injection - Uso profissional do Spring e Lombok
✅ Timestamps de Auditoria - Rastreabilidade completa com CreationTimestamp
✅ Soft Delete - Campo active para exclusão lógica de registros
✅ Paginação - Endpoints com suporte a paginação automática
✅ Documentação OpenAPI - Swagger gerado automaticamente
✅ Orientado a Domínio - Projeto estruturado em torno de conceitos reais
Este projeto foi idealizado para resolver um problema operacional real no setor de TI em cartórios e serventias, substituindo controles manuais em planilhas por uma API estruturada, segura e escalável.
- 🎯 Domínio Real - Nasceu de necessidades reais, não é apenas um projeto de aprendizado
- 🔒 Segurança em Primeiro Lugar - Criptografia de credenciais sensíveis e autenticação JWT robusta
- 📊 Rastreabilidade Completa - Auditoria de todas as ações com timestamps
- 🏗️ Arquitetura Profissional - Padrões de desenvolvimento adotados em grandes empresas
- 📈 Escalabilidade - Preparado para crescer e adicionar novas funcionalidades
- 🔄 Versionamento Rigoroso - Controle completo do schema com Flyway
- 📚 Bem Documentado - Swagger/OpenAPI integrado para fácil compreensão
Utiliza tecnologias modernas e amplamente adotadas no mercado:
- Spring Boot 3 (framework mais usado em Java)
- PostgreSQL (banco mais confiável para produção)
- Docker (padrão de containerização da indústria)
- JWT (autenticação stateless moderna)
Este projeto está em desenvolvimento contínuo. Para dúvidas, sugestões ou contribuições, sinta-se livre para abrir uma issue ou pull request.