Minha implementação do Desafio Backend Júnior do Itaú com funcionalidades extras e interface web completa.
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.
- ✅ POST /transacao - Receber e validar transações
- Validação de campos obrigatórios (
valoredataHora) - Rejeição de transações futuras
- Rejeição de valores negativos
- Resposta com status codes corretos (201, 400, 422)
- Validação de campos obrigatórios (
- ✅ 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
-
✅ Testes Automatizados
- Testes unitários com JUnit 5
- Cobertura de casos de sucesso e erro
- Testes de integração
-
✅ Containerização
- Docker Compose com PostgreSQL
- Configuração multi-container
- Build automatizado
-
✅ Logs
- SLF4J + Logback
- Logs estruturados por nível
- Rastreamento de operações
-
✅ Observabilidade
- Spring Boot Actuator
- Health checks
- Endpoints de monitoramento
-
✅ Tratamento de Erros
- Exception handlers customizados
- Mensagens de erro descritivas
- HTTP status codes apropriados
-
✅ Documentação da API
- Swagger/OpenAPI 3.0
- Interface interativa
- Exemplos de requisição/resposta
-
✅ Documentação do Sistema
- README completo
- Instruções de build e execução
- Comandos Docker
-
✅ Configurações
- Janela de tempo configurável via
application.yml - Perfis de ambiente (dev, test, prod)
- Variáveis de ambiente
- Janela de tempo configurável via
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
- 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)
- React 19.1.1
- TypeScript 5.7
- Vite (Build Tool)
- Tailwind CSS 4.1 (Styling)
- Radix UI (Component Library)
- Lucide React (Icons)
- Docker & Docker Compose
- Maven (Build Tool)
- Git (Version Control)
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
- Docker e Docker Compose instalados
- Portas disponíveis:
8080(API),5173(Frontend),5432(PostgreSQL)
# Construir e iniciar todos os containers
docker-compose up -d --build
# Verificar logs
docker-compose logs -f
# Parar containers
docker-compose down -vA aplicação estará disponível em:
- Frontend: http://localhost:5173
- Backend API: http://localhost:8080
- Swagger/Docs: http://localhost:8080/swagger-ui/index.html
- Health Check: http://localhost:8080/actuator/health
cd api
# Compilar
./mvnw clean install
# Executar
./mvnw spring-boot:run
# Ou executar o JAR
java -jar target/desafio.itau-0.0.1-SNAPSHOT.jarcd 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 buildcd api
# Executar todos os testes
./mvnw test
# Executar com cobertura
./mvnw test jacoco:reportCriar Transação
POST /transacao
Content-Type: application/json
{
"valor": 123.45,
"dataHora": "2025-12-10T15:30:00.000Z"
}Listar Transações
GET /transacaoDeletar Transação
DELETE /transacao
Content-Type: application/json
{
"id": 1
}Obter Estatísticas
GET /estatistica?margemTempo=60
Response:
{
"count": 10,
"sum": 1234.56,
"avg": 123.456,
"min": 12.34,
"max": 123.56
}Acesse a documentação completa e interativa da API:
- Swagger UI: http://localhost:8080/swagger-ui/index.html
- OpenAPI Spec: http://localhost:8080/v3/api-docs
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
margem-tempo:
segundos: 60 # Janela de tempo para estatísticas# Backend
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/desafio_itau
SPRING_DATASOURCE_USERNAME=postgres
SPRING_DATASOURCE_PASSWORD=postgres
# Frontend
VITE_API_URL=http://localhost:8080O 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
curl http://localhost:8080/actuator/healthcurl http://localhost:8080/actuator/info- ✅ 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
Este projeto foi desenvolvido como parte de um desafio técnico e está disponível para fins educacionais.
Alanis Quintana
- GitHub: @alanisquintana
- LinkedIn: Alanis Quintana