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.
A API implementa os seguintes endpoints:
-
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. -
DELETE
/transacao
Limpa todos os dados de transações armazenados. -
GET
/estatistica
Retorna as estatísticas das transações do tipoDoubleSummaryStatistics, 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
- 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.
Envie uma transação no formato 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.
Este endpoint limpa todas as transações armazenadas. Resposta:
- 200 OK: Quando as transações forem apagadas com sucesso.
Este endpoint retorna as estatísticas das transações do tipo DoubleSummaryStatistics, realizadas nos últimos 60 segundos. Exemplo de resposta:
{
"count": 3,
"sum": 500.48,
"avg": 166.82666666666668,
"min": 49.99,
"max": 300.49
}As transações são validadas com os seguintes critérios:
- O campo
valornão pode ser negativo. - O campo
dataHoranão pode ser no futuro. - O valor da transação deve ser maior ou igual a 0.
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.
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.
Este projeto utiliza as seguintes dependências do Spring Boot:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>Essas dependências garantem o funcionamento da API, validação dos dados, e ferramentas de desenvolvimento e teste para o projeto.
Sinta-se à vontade para abrir issues ou enviar pull requests com melhorias, correções ou novas funcionalidades.
Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para mais detalhes.