Este projeto foi desenvolvido como parte de um desafio técnico para uma vaga no Banco Itaú. O objetivo é demonstrar habilidades em desenvolvimento backend utilizando Java com Spring Boot, seguindo boas práticas de arquitetura, validação, tratamento de erros e organização de código.
- Descrição do Desafio
- Arquitetura e Tecnologias
- Funcionalidades Implementadas
- Detalhamento dos Endpoints
- Validações e Regras de Negócio
- Como Executar o Projeto
- Testes Automatizados
- Possíveis Melhorias
- Licença
- Contato
- Fork/Clone
O sistema simula uma API REST para registro e análise de transações financeiras, inspirado em desafios clássicos de bancos digitais. O objetivo é registrar transações e fornecer estatísticas agregadas em tempo real, garantindo integridade, performance e código limpo.
- Java 17
- Spring Boot 3.4.7
- Maven (gerenciamento de dependências)
- Jakarta Validation (validação de dados de entrada)
- Estrutura em camadas: Controller, Service, DTO, Model
- Armazenamento em memória: Dados voláteis, não persistidos em banco de dados
- Registro de transações: Cadastro de transações financeiras com valor e data/hora.
- Limpeza de transações: Remoção de todas as transações registradas.
- Consulta de estatísticas: Retorno de estatísticas agregadas (soma, média, mínimo, máximo, quantidade).
- Validação de dados: Apenas transações válidas são aceitas.
- Thread-safe: Uso de
ConcurrentLinkedQueue
para segurança em ambientes concorrentes.
- Endpoint:
POST /transacao
- Request Body:
{ "valor": 100.0, "dataHora": "2024-05-01T12:00:00Z" }
- Validações:
- O valor deve ser maior que zero.
- A data/hora não pode ser no futuro.
- Ambos os campos são obrigatórios.
- Respostas:
201 Created
: Transação registrada com sucesso.422 Unprocessable Entity
: Dados inválidos (valor ≤ 0 ou data/hora futura).
- Endpoint:
DELETE /transacao
- Descrição: Remove todas as transações registradas.
- Resposta:
200 OK
- Endpoint:
GET /estatistica
- Resposta:
{ "count": 2, "sum": 200.0, "avg": 100.0, "min": 100.0, "max": 100.0 }
- Descrição: Retorna estatísticas agregadas das transações registradas.
- Validação de entrada: Uso de
@NotNull
nos DTOs e validação manual no controller. - Regras de negócio:
- Não são aceitas transações com valor menor ou igual a zero.
- Não são aceitas transações com data/hora futura.
- Thread-safe: Fila de transações é uma
ConcurrentLinkedQueue
. - Persistência: Dados são armazenados apenas em memória (voláteis).
- Autenticação/Autorização: Não implementadas (pode ser sugerido como melhoria).
- Documentação Swagger/OpenAPI: Não implementada (pode ser sugerido como melhoria).
Observação: O código possui um comentário para possível filtro de transações dos últimos 60 segundos, mas atualmente todas as transações são consideradas nas estatísticas.
- Pré-requisitos: Java 17+ e Maven instalados.
- Clonar o repositório:
git clone https://github.com/gontroller/spring-boot.desafio.itau.git cd spring-boot.desafio.itau
- Executar a aplicação:
Ou, no Windows:
./mvnw spring-boot:run
mvnw.cmd spring-boot:run
- Acessar os endpoints: Utilize Postman, Insomnia ou cURL.
- O projeto possui um teste básico de contexto (
contextLoads
) para garantir que a aplicação sobe corretamente. - Possível melhoria: Implementar testes unitários e de integração para os serviços e controllers, cobrindo cenários de sucesso e erro.
- Implementar filtro para considerar apenas transações dos últimos 60 segundos nas estatísticas.
- Adicionar testes unitários e de integração.
- Implementar autenticação e autorização.
- Documentar a API com Swagger/OpenAPI.
- Persistência em banco de dados.
Distribuído sob a licença MIT. Veja LICENSE para mais informações.
Desenvolvido por Gabriel para o desafio do Banco Itaú.
- 📧 E-mail: [email protected]
- 💼 LinkedIn: Gabriel Tasso
Se você deseja contribuir, dar um fork ou clonar este repositório, utilize o link abaixo:
https://github.com/gontroller/spring-boot.desafio.itau
Projeto desenvolvido para fins de avaliação técnica. Sinta-se à vontade para abrir issues, sugerir melhorias ou contribuir!