https://github.com/leandrordg/springboot-desafio-itau
Desafio com Spring boot para vaga de backend no Itaú Unibanco
https://github.com/leandrordg/springboot-desafio-itau
java17 spring-boot summary-statistics thread-safe-queue
Last synced: 8 months ago
JSON representation
Desafio com Spring boot para vaga de backend no Itaú Unibanco
- Host: GitHub
- URL: https://github.com/leandrordg/springboot-desafio-itau
- Owner: leandrordg
- License: mit
- Created: 2025-03-30T23:31:30.000Z (about 1 year ago)
- Default Branch: development
- Last Pushed: 2025-03-31T16:40:51.000Z (about 1 year ago)
- Last Synced: 2025-06-10T00:03:23.098Z (about 1 year ago)
- Topics: java17, spring-boot, summary-statistics, thread-safe-queue
- Language: Java
- Homepage:
- Size: 22.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Desafio Itaú Unibanco - Backend




Este repositório contém a solução para o desafio de programação proposto pelo Itaú Unibanco. O desafio consiste em criar uma API REST que recebe transações e retorna estatísticas baseadas nessas transações.
A aplicação foi desenvolvida utilizando **Java** com **Spring Boot**, e os dados são armazenados em memória utilizando a estrutura **ConcurrentLinkedQueue**.
## Requisitos do Projeto
### Endpoints da API
A API implementa os seguintes endpoints:
1. **POST `/transacao`**
Recebe transações e as armazena em memória. Cada transação contém um valor e uma data/hora de ocorrência.
2. **DELETE `/transacao`**
Limpa todos os dados de transações armazenados.
3. **GET `/estatistica`**
Retorna as estatísticas das transações do tipo `DoubleSummaryStatistics`, que ocorreram nos últimos 60 segundos. As estatísticas incluem:
- Quantidade de transações
- Soma total dos valores das transações
- Média dos valores
- Menor valor
- Maior valor
### Requisitos Técnicos
- **Tecnologia**: A aplicação foi desenvolvida utilizando **Java 17** com **Spring Boot 3.4.4**.
- **Armazenamento**: Os dados são armazenados **em memória** utilizando uma **ConcurrentLinkedQueue**, que garante a segurança em acesso concorrente.
- **Formato de dados**: A API utiliza **JSON** para comunicação.
## Exemplos de Uso
### 1. Receber uma Transação: `POST /transacao`
Envie uma transação no formato JSON:
```json
{
"valor": 300.49,
"dataHora": "2025-03-30T20:15:10.789-03:00"
}
```
Resposta:
- **201 Created**: Quando a transação for válida e armazenada.
- **422 Unprocessable Entity**: Quando a transação for inválida.
- **400 Bad Request**: Quando o formato JSON estiver errado.
### 2. Limpar Transações: `DELETE /transacao`
Este endpoint limpa todas as transações armazenadas. Resposta:
- **200 OK**: Quando as transações forem apagadas com sucesso.
### 3. Calcular Estatísticas: `GET /estatistica`
Este endpoint retorna as estatísticas das transações do tipo `DoubleSummaryStatistics`, realizadas nos últimos 60 segundos. Exemplo de resposta:
```json
{
"count": 3,
"sum": 500.48,
"avg": 166.82666666666668,
"min": 49.99,
"max": 300.49
}
```
## Considerações de Implementação
### Validação das Transações
As transações são validadas com os seguintes critérios:
- O campo `valor` não pode ser negativo.
- O campo `dataHora` não pode ser no futuro.
- O valor da transação deve ser maior ou igual a 0.
### Armazenamento em Memória
As transações são armazenadas em memória utilizando uma `ConcurrentLinkedQueue`. Essa estrutura permite um acesso seguro em ambientes multithreaded, o que é importante caso haja concorrência no armazenamento das transações.
### Estatísticas
As estatísticas são calculadas através de um pacote utilitário do java `DoubleSummaryStatistics`, que através de um filtro retorna apenas transações realizadas nos últimos 60 segundos **`1 minuto`**. Se não houver transações no período, as estatísticas retornam valores zero.
## Dependências Utilizadas
Este projeto utiliza as seguintes dependências do **Spring Boot**:
```xml
org.springframework.boot
spring-boot-starter-validation
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.boot
spring-boot-starter-test
test
```
Essas dependências garantem o funcionamento da API, validação dos dados, e ferramentas de desenvolvimento e teste para o projeto.
## Contribuindo
Sinta-se à vontade para abrir issues ou enviar pull requests com melhorias, correções ou novas funcionalidades.
## Licença
Este projeto está licenciado sob a MIT License - veja o arquivo [LICENSE](LICENSE) para mais detalhes.