API REST para recebimento e estatísticas de transações financeiras em tempo real, desenvolvida com Spring Boot 4 e Java 21.
A API permite registrar transações financeiras e consultar estatísticas calculadas dinamicamente com base em um intervalo de tempo configurável. Todos os dados são mantidos em memória sem banco de dados.
Projeto inspirado no desafio técnico de backend da Itaú Unibanco.
| Tecnologia | Versão |
|---|---|
| Java | 21 |
| Spring Boot | 4.0.2 |
| Gradle | 9.3.0 |
| Lombok | — |
| Swagger | 2.8.3 |
O projeto segue uma arquitetura em camadas bem definida, separando responsabilidades de forma clara:
src/
└── main/
└── java/com/graeff/transacao_api/
├── controller/
│ ├── dtos/
│ ├── TransacaoController.java
│ └── EstatisticasController.java
├── business/
│ └── services/
│ ├── TransacaoService.java
│ └── EstatisticasService.java
└── infrastructure/
└── exceptions/
└── UnprocessableEntity.java
- Java 21 instalado
- Git
# Clone o repositório
git clone https://github.com/JuanMarquesJM/transacao-api.git
cd transacao-api
# Execute com o Gradle Wrapper
./gradlew bootRun # Linux/macOS
gradlew.bat bootRun # WindowsA aplicação sobe por padrão em http://localhost:8080.
Com a aplicação rodando, acesse:
http://localhost:8080/swagger-ui/index.html
Registra uma nova transação.
Request Body:
{
"valor": 150.75,
"dataHora": "2025-04-23T10:30:00-03:00"
}| Status | Descrição |
|---|---|
201 Created |
Transação registrada com sucesso |
422 Unprocessable Entity |
Valor negativo ou data/hora no futuro |
400 Bad Request |
Erro na requisição |
500 Internal Server Error |
Erro interno |
Remove todas as transações da memória.
| Status | Descrição |
|---|---|
200 OK |
Transações removidas com sucesso |
Retorna estatísticas das transações dentro do intervalo especificado.
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
intervaloBusca |
Integer |
Não | 60 |
Janela de tempo em segundos |
Response:
{
"count": 3,
"sum": 450.25,
"avg": 150.08,
"min": 50.00,
"max": 250.25
}| Status | Descrição |
|---|---|
200 OK |
Estatísticas calculadas com sucesso |
Se não houver transações no período, todos os valores retornam
0.
- O campo
valornão pode ser negativo. - O campo
dataHoranão pode ser uma data/hora no futuro. - As estatísticas consideram apenas transações dentro da janela de tempo informada. Padrão: últimos 60 segundos.
- Os dados são armazenados em memória e perdidos ao reiniciar a aplicação.
Juan Marques
- LinkedIn: juanmarques-jm