RESTful API desenvolvida para o sistema de anotações e gerenciamento de contatos e empresas, com autenticação e boas práticas de desenvolvimento backend em Java.
- 📇
CRUD de Contatos: Endpoints completos para criar, listar, atualizar e excluir contatos. - 🏢
CRUD de Empresas: Cadastro e gerenciamento de empresas associadas aos contatos. - 👤
CRUD de Usuários: Gestão dos usuários do sistema com autenticação segura. - 📄
Paginação e Ordenação: Listagens otimizadas com suporte a paginação e ordenação dinâmica. - ✅
Validações: Validação de dados com Bean Validation para garantir a integridade das requisições. ⚠️ Tratamento de Erros: Respostas padronizadas com mensagens claras para erros comuns.- 🔐
Criptografia: Senhas criptografadas com segurança utilizando BCrypt. - 🔑
Autenticação JWT: Autenticação segura baseada em token JWT. - 📚
Documentação com Spring Docs: Interface automática e interativa para explorar os endpoints da API.
- ⚙️
Spring Boot Test– Estrutura principal de testes do Spring. - 🌐
MockMvc– Simula requisições HTTP para os controllers. - 🎭
Mockito (@MockitoBean)– Mocka dependências como o UsuarioRepository e BCryptPasswordEncoder. - 📦
JacksonTester– Serializa e desserializa objetos JSON nos testes. - 🧪
JUnit 5– Framework de testes usado com anotações como @Test e @DisplayName.
- POST
/login
Descrição: Autentica um usuário e retorna um token JWT para acesso aos endpoints protegidos. Requisição:
{
"email": "[email protected]",
"senha": "senha123"
}
Resposta:
{
"token": "jwt-token-aqui"
}
🔐 Nota: Todos os endpoints (exceto /login e POST /usuarios) requerem um token JWT válido no cabeçalho Authorization no formato Bearer {token}.
- POST
/usuarios
Descrição: Cria um novo usuário no sistema. Requisição:
{
"nome": "Nome do Usuário",
"email": "[email protected]",
"senha": "senha123"
}
Resposta: Detalhes do usuário criado.
- GET
/usuarios
Descrição: Lista todos os usuários com suporte a paginação e ordenação.
Parâmetros de Query:
page: Número da página (opcional).
size: Quantidade de registros por página (opcional).
sort: Campo para ordenação (opcional).
- GET
/usuarios/{id}
Descrição: Retorna os detalhes de um usuário específico.
- PUT
/usuarios/{id}
Descrição: Atualiza as informações de um usuário existente.
- DELETE
/usuarios/{id}
Descrição: Remove um usuário do sistema.
- POST
/contatos
Descrição: Cria um novo contato associado a uma empresa (não obrigatório).
Requisição:
{
"nome": "Nome do Contato",
"email": "[email protected]",
"telefone": "123456789",
"empresaId": 1
}
Resposta: Detalhes do contato criado.
- GET
/contatos
Descrição: Lista todos os contatos com suporte a paginação e ordenação.
- GET
/contatos/{id}
Descrição: Retorna os detalhes de um contato específico.
- PUT
/contatos/{id}
Descrição: Atualiza as informações de um contato existente.
- DELETE
/contatos/{id}
Descrição: Remove um contato do sistema.
- POST
/empresas
Descrição: Cria uma nova empresa.
Requisição:
{
"nome": "Nome da Empresa",
"cnpj": "12.345.678/0001-99"
}
Resposta: Detalhes da empresa criada.
- GET
/empresas
Descrição: Lista todas as empresas com suporte a paginação e ordenação.
- GET
/empresas/{id}
Descrição: Retorna os detalhes de uma empresa específica.
- PUT
/empresas/{id}
Descrição: Atualiza as informações de uma empresa existente.
- DELETE
/empresas/{id}
Descrição: Remove uma empresa do sistema.