Skip to content

gontroller/spring-boot.desafio.itau

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Spring Boot Desafio Itaú

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.

Java Spring Boot License: MIT


📚 Sumário


📝 Descrição do Desafio

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.


🏗️ Arquitetura e Tecnologias

  • 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

✨ Funcionalidades Implementadas

  • 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.

📲 Detalhamento dos Endpoints

1. Registrar Transação

  • 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).

2. Limpar Transações

  • Endpoint: DELETE /transacao
  • Descrição: Remove todas as transações registradas.
  • Resposta: 200 OK

3. Consultar Estatísticas

  • 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ções e Regras de Negócio

  • 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.


▶️ Como Executar o Projeto

  1. Pré-requisitos: Java 17+ e Maven instalados.
  2. Clonar o repositório:
    git clone https://github.com/gontroller/spring-boot.desafio.itau.git
    cd spring-boot.desafio.itau
  3. Executar a aplicação:
    ./mvnw spring-boot:run
    Ou, no Windows:
    mvnw.cmd spring-boot:run
  4. Acessar os endpoints: Utilize Postman, Insomnia ou cURL.

🧪 Testes Automatizados

  • 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.

🚀 Possíveis Melhorias

  • 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.

📝 Licença

Distribuído sob a licença MIT. Veja LICENSE para mais informações.


👤 Contato

Desenvolvido por Gabriel para o desafio do Banco Itaú.


🌐 Fork/Clone

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!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages