Skip to content

alanisquintana/desafio-itau-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

💼 Desafio Itaú - Backend Júnior

Java Spring Boot React TypeScript PostgreSQL Docker

Minha implementação do Desafio Backend Júnior do Itaú com funcionalidades extras e interface web completa.

📋 Sobre o Projeto

Este projeto é uma solução completa para o desafio de backend júnior do banco Itaú, que consiste em criar uma API REST para gerenciamento de transações financeiras e cálculo de estatísticas em tempo real.

✅ Requisitos do Desafio Atendidos

📌 Requisitos Obrigatórios

  • POST /transacao - Receber e validar transações
    • Validação de campos obrigatórios (valor e dataHora)
    • Rejeição de transações futuras
    • Rejeição de valores negativos
    • Resposta com status codes corretos (201, 400, 422)
  • DELETE /transacao - Limpar todas as transações
  • GET /estatistica - Calcular estatísticas dos últimos 60 segundos
    • Count, sum, avg, min, max
    • Janela de tempo configurável
  • ✅ Uso de Java com Spring Boot
  • ✅ Formato de data ISO 8601 (OffsetDateTime)
  • ✅ Validações de entrada completas
  • ✅ Commits separados por endpoint

🎯 Extras Implementados

  1. Testes Automatizados

    • Testes unitários com JUnit 5
    • Cobertura de casos de sucesso e erro
    • Testes de integração
  2. Containerização

    • Docker Compose com PostgreSQL
    • Configuração multi-container
    • Build automatizado
  3. Logs

    • SLF4J + Logback
    • Logs estruturados por nível
    • Rastreamento de operações
  4. Observabilidade

    • Spring Boot Actuator
    • Health checks
    • Endpoints de monitoramento
  5. Tratamento de Erros

    • Exception handlers customizados
    • Mensagens de erro descritivas
    • HTTP status codes apropriados
  6. Documentação da API

    • Swagger/OpenAPI 3.0
    • Interface interativa
    • Exemplos de requisição/resposta
  7. Documentação do Sistema

    • README completo
    • Instruções de build e execução
    • Comandos Docker
  8. Configurações

    • Janela de tempo configurável via application.yml
    • Perfis de ambiente (dev, test, prod)
    • Variáveis de ambiente

🚀 Funcionalidades Extras

Além dos requisitos do desafio, foram implementadas funcionalidades adicionais:

  • 🎨 Interface Web Completa (React + TypeScript)

    • Dashboard com listagem de transações
    • Formulário para criar transações
    • Filtros avançados (ID, data início, data fim)
    • Design responsivo com Tailwind CSS
  • 💾 Persistência de Dados

    • PostgreSQL para armazenamento permanente
    • Migrations com Flyway
    • JPA/Hibernate para ORM
  • 🔄 Funcionalidades Adicionais

    • GET /transacao - Listar todas as transações
    • DELETE /transacao (por ID) - Deletar transação específica
    • MapStruct para mapeamento de DTOs
    • Validações Jakarta Bean Validation

🛠️ Tecnologias Utilizadas

Backend

  • Java 21 (LTS)
  • Spring Boot 3.5.6
  • Spring Data JPA
  • Spring Validation
  • PostgreSQL 17
  • Flyway (Migrations)
  • MapStruct 1.6.3 (Object Mapping)
  • Lombok (Boilerplate Reduction)
  • Swagger/OpenAPI 3.0 (API Documentation)
  • JUnit 5 (Testing)

Frontend

  • React 19.1.1
  • TypeScript 5.7
  • Vite (Build Tool)
  • Tailwind CSS 4.1 (Styling)
  • Radix UI (Component Library)
  • Lucide React (Icons)

DevOps

  • Docker & Docker Compose
  • Maven (Build Tool)
  • Git (Version Control)

📦 Estrutura do Projeto

desafio-itau/
├── api/                          # Backend (Java/Spring Boot)
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   │   └── com/alanisquintana/desafio/itau/
│   │   │   │       ├── config/          # Configurações
│   │   │   │       ├── controllers/     # REST Controllers
│   │   │   │       ├── dtos/            # Data Transfer Objects
│   │   │   │       ├── entities/        # Entidades JPA
│   │   │   │       ├── exceptions/      # Exception Handlers
│   │   │   │       ├── mappers/         # MapStruct Mappers
│   │   │   │       ├── repositories/    # Spring Data Repositories
│   │   │   │       ├── services/        # Business Logic
│   │   │   │       └── utils/           # Utilitários
│   │   │   └── resources/
│   │   │       ├── application.yml      # Configurações
│   │   │       └── db/migration/        # Flyway Migrations
│   │   └── test/                        # Testes
│   ├── Dockerfile
│   └── pom.xml
├── client/                       # Frontend (React/TypeScript)
│   ├── src/
│   │   ├── components/          # Componentes React
│   │   ├── hooks/               # Custom Hooks
│   │   ├── types/               # TypeScript Types
│   │   └── utils/               # Utilitários
│   ├── Dockerfile
│   └── package.json
└── docker-compose.yml           # Orquestração de containers

🚀 Como Executar

Pré-requisitos

  • Docker e Docker Compose instalados
  • Portas disponíveis: 8080 (API), 5173 (Frontend), 5432 (PostgreSQL)

Rodar a Aplicação Completa (Recomendado)

# Construir e iniciar todos os containers
docker-compose up -d --build

# Verificar logs
docker-compose logs -f

# Parar containers
docker-compose down -v

A aplicação estará disponível em:

Rodar Backend Localmente (Desenvolvimento)

cd api

# Compilar
./mvnw clean install

# Executar
./mvnw spring-boot:run

# Ou executar o JAR
java -jar target/desafio.itau-0.0.1-SNAPSHOT.jar

Rodar Frontend Localmente (Desenvolvimento)

cd client

# Instalar dependências
npm install

# Criar arquivo .env
echo "VITE_API_URL=http://localhost:8080" > .env

# Executar em modo desenvolvimento
npm run dev

# Build para produção
npm run build

Executar Testes

cd api

# Executar todos os testes
./mvnw test

# Executar com cobertura
./mvnw test jacoco:report

📚 Documentação da API

Endpoints Principais

Transações

Criar Transação

POST /transacao
Content-Type: application/json

{
  "valor": 123.45,
  "dataHora": "2025-12-10T15:30:00.000Z"
}

Listar Transações

GET /transacao

Deletar Transação

DELETE /transacao
Content-Type: application/json

{
  "id": 1
}

Estatísticas

Obter Estatísticas

GET /estatistica?margemTempo=60

Response:
{
  "count": 10,
  "sum": 1234.56,
  "avg": 123.456,
  "min": 12.34,
  "max": 123.56
}

Documentação Interativa

Acesse a documentação completa e interativa da API:

🎨 Interface Web

A interface web oferece:

  • Dashboard de Transações

    • Tabela com paginação e ordenação
    • Filtros por ID e período
    • Ações de deletar transação
  • Formulário de Criação

    • Máscara de valor em Real (R$)
    • Data/hora automática
    • Validação em tempo real

⚙️ Configurações

application.yml

margem-tempo:
  segundos: 60  # Janela de tempo para estatísticas

Variáveis de Ambiente

# Backend
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/desafio_itau
SPRING_DATASOURCE_USERNAME=postgres
SPRING_DATASOURCE_PASSWORD=postgres

# Frontend
VITE_API_URL=http://localhost:8080

🧪 Testes

O projeto inclui testes automatizados para:

  • ✅ Criação de transações
  • ✅ Validações de entrada
  • ✅ Cálculo de estatísticas
  • ✅ Deleção de transações
  • ✅ Casos de erro

📊 Monitoramento

Health Check

curl http://localhost:8080/actuator/health

Métricas

curl http://localhost:8080/actuator/info

🔒 Validações Implementadas

  • ✅ Valor obrigatório e positivo
  • ✅ Data/hora obrigatória e não futura
  • ✅ Formato ISO 8601 para datas
  • ✅ Validação de JSON malformado
  • ✅ Tratamento de erros com status codes apropriados

📝 Licença

Este projeto foi desenvolvido como parte de um desafio técnico e está disponível para fins educacionais.

👤 Autor

Alanis Quintana