A API Controle de Despesas é responsável pelo gerenciamento de transações financeiras dos usuários, permitindo o controle eficiente de receitas e despesas.
O projeto segue uma arquitetura baseada em camadas:
- Controller: Responsável por receber requisições HTTP e retornar respostas.
- Service: Contém a lógica de negócio da aplicação.
- Repository: Interage diretamente com o banco de dados usando o Spring Data JPA.
A API é desenvolvida em Spring Boot e utiliza PostgreSQL como banco de dados. Para simplificar a execução, os serviços são disponibilizados via Docker Compose.
-
Veja os Diagramas do Projeto
-
Créditos aos autores:
- Casos de Uso — Pamela Brito
- Diagrama de Classes — Natália Gomes
- Modelo de Dados — Milena Mensor
Método | Endpoint | Descrição | Autenticação |
---|---|---|---|
POST | /api/v1/usuarios |
Cadastra um novo usuário | ❌ Não requer |
POST | /api/v1/login |
Autentica o usuário e retorna um token JWT | ✅ Basic Auth |
PATCH | /api/v1/usuarios/senha |
Redefine a senha do usuário autenticado | ✅ JWT Token |
POST | /api/v1/despesas |
Cria uma nova despesa ao usuário autenticado | ✅ JWT Token |
GET | /api/v1/despesas |
Filtra as despesas do usuário autenticado, pode ser por filtro ou todas | ✅ JWT Token |
PUT | /api/v1/despesas |
Atualiza uma despesa do usuário autenticado pelo seu ID | ✅ JWT Token |
PATCH | /api/v1/despesas/{id}/inativar |
Inativa (safe delete) uma despesa do usuário autenticado pelo seu ID | ✅ JWT Token |
POST | /api/v1/otp/enviar |
Gera e envia um código OTP por email | ❌ Não requer |
PATCH | /api/v1/usuarios/redefinir-senha |
Redefine a senha usando OTP (email, código e nova senha) | ❌ Não requer |
A API utiliza Spring Security em conjunto com OAuth2 Resource Server para proteger os endpoints de forma robusta.
São utilizados dois métodos de autenticação:
-
Autenticação Básica (Basic Auth): utilizada exclusivamente no endpoint de login (
/api/v1/login
). O usuário informa email e senha, e em caso de sucesso, recebe um token JWT. -
JWT (Bearer Token): após o login, o token JWT deve ser enviado no cabeçalho
Authorization
para acessar rotas privadas. Esse token é validado automaticamente peloOAuth2 Resource Server
.
Exemplo de envio do token nas requisições autenticadas:
Authorization: Bearer SEU_TOKEN_JWT
A API utiliza a biblioteca Jakarta Bean Validation (por meio do starter spring-boot-starter-validation
) para validar automaticamente os dados recebidos nas requisições.
- Todos os parâmetros e corpos de requisição (request bodies) são validados antes da execução da lógica de negócio.
- As anotações de validação (
@NotNull
,@Email
,@Size
,@Pattern
, entre outras) garantem que os dados estejam no formato esperado e com valores obrigatórios preenchidos. - A utilização de DTOs (Data Transfer Objects) permite isolar as camadas da aplicação e proteger a integridade das entidades do domínio, garantindo que apenas os dados necessários sejam expostos e modificados.
Siga o passo a passo completo para rodar o projeto localmente no arquivo abaixo:
Antes de começar, certifique-se de ter os seguintes requisitos instalados:
- Java 17
- Docker (para subir o banco de dados PostgreSQL)
- OpenSSL (para geração das chaves RSA)
As credenciais e instruções para configuração dos servidores SMTP (produção usando Gmail e ambiente de testes com Mailtrap) estão detalhadas no arquivo:
Para garantir a qualidade do código e o correto funcionamento das funcionalidades, a aplicação possui testes automatizados (integração).
Importante: Para executar os testes, é necessário ter o Maven instalado e a variável de ambiente MAVEN_HOME corretamente configurada no sistema.
Utilize os comandos abaixo no terminal:
# Executa todos os testes com limpeza prévia
mvn clean test
# Executa apenas uma classe de teste específica
mvn -Dtest=NomeDaClasseDeTeste test
# Executa apenas métodos específicos de uma classe de teste
mvn -Dtest=NomeDaClasseDeTeste#nomeDoMetodo test
# Executa os testes com log detalhado
mvn -X test
Após iniciar a aplicação, você pode acessar a documentação no Swagger:
Aqui, você pode visualizar e testar os endpoints disponíveis.