{"id":27175283,"url":"https://github.com/leandrordg/springboot-desafio-itau","last_synced_at":"2025-10-16T03:25:33.886Z","repository":{"id":285307859,"uuid":"957678356","full_name":"leandrordg/springboot-desafio-itau","owner":"leandrordg","description":"Desafio com Spring boot para vaga de backend no Itaú Unibanco","archived":false,"fork":false,"pushed_at":"2025-03-31T16:40:51.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"development","last_synced_at":"2025-06-10T00:03:23.098Z","etag":null,"topics":["java17","spring-boot","summary-statistics","thread-safe-queue"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leandrordg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-30T23:31:30.000Z","updated_at":"2025-04-01T01:50:40.000Z","dependencies_parsed_at":"2025-06-10T00:03:24.163Z","dependency_job_id":"e6baeb98-02b7-4257-bf74-66008d5a2a40","html_url":"https://github.com/leandrordg/springboot-desafio-itau","commit_stats":null,"previous_names":["leandrordg/springboot-desafio-itau"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/leandrordg/springboot-desafio-itau","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fspringboot-desafio-itau","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fspringboot-desafio-itau/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fspringboot-desafio-itau/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fspringboot-desafio-itau/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leandrordg","download_url":"https://codeload.github.com/leandrordg/springboot-desafio-itau/tar.gz/refs/heads/development","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fspringboot-desafio-itau/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279144673,"owners_count":26113499,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-16T02:00:06.019Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java17","spring-boot","summary-statistics","thread-safe-queue"],"created_at":"2025-04-09T12:18:09.574Z","updated_at":"2025-10-16T03:25:33.843Z","avatar_url":"https://github.com/leandrordg.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Desafio Itaú Unibanco - Backend\n\n![Build Status](https://img.shields.io/github/workflow/status/leandrordg/springboot-desafio-itau/CI?label=Build\u0026logo=github)\n![License](https://img.shields.io/github/license/leandrordg/springboot-desafio-itau)\n![Java Version](https://img.shields.io/badge/Java-17-blue)\n![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.4.4-brightgreen)\n\nEste 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.\n\nA aplicação foi desenvolvida utilizando **Java** com **Spring Boot**, e os dados são armazenados em memória utilizando a estrutura **ConcurrentLinkedQueue**.\n\n## Requisitos do Projeto\n\n### Endpoints da API\n\nA API implementa os seguintes endpoints:\n\n1. **POST `/transacao`**  \n   Recebe transações e as armazena em memória. Cada transação contém um valor e uma data/hora de ocorrência.\n\n2. **DELETE `/transacao`**  \n   Limpa todos os dados de transações armazenados.\n\n3. **GET `/estatistica`**  \n   Retorna as estatísticas das transações do tipo `DoubleSummaryStatistics`, que ocorreram nos últimos 60 segundos. As estatísticas incluem:\n   - Quantidade de transações\n   - Soma total dos valores das transações\n   - Média dos valores\n   - Menor valor\n   - Maior valor\n\n### Requisitos Técnicos\n\n- **Tecnologia**: A aplicação foi desenvolvida utilizando **Java 17** com **Spring Boot 3.4.4**.\n- **Armazenamento**: Os dados são armazenados **em memória** utilizando uma **ConcurrentLinkedQueue**, que garante a segurança em acesso concorrente.\n- **Formato de dados**: A API utiliza **JSON** para comunicação.\n\n## Exemplos de Uso\n\n### 1. Receber uma Transação: `POST /transacao`\n\nEnvie uma transação no formato JSON:\n\n```json\n{\n    \"valor\": 300.49,\n    \"dataHora\": \"2025-03-30T20:15:10.789-03:00\"\n}\n```\n\nResposta:\n- **201 Created**: Quando a transação for válida e armazenada.\n- **422 Unprocessable Entity**: Quando a transação for inválida.\n- **400 Bad Request**: Quando o formato JSON estiver errado.\n\n### 2. Limpar Transações: `DELETE /transacao`\n\nEste endpoint limpa todas as transações armazenadas. Resposta:\n\n- **200 OK**: Quando as transações forem apagadas com sucesso.\n\n### 3. Calcular Estatísticas: `GET /estatistica`\n\nEste endpoint retorna as estatísticas das transações do tipo `DoubleSummaryStatistics`, realizadas nos últimos 60 segundos. Exemplo de resposta:\n\n```json\n{\n    \"count\": 3,\n    \"sum\": 500.48,\n    \"avg\": 166.82666666666668,\n    \"min\": 49.99,\n    \"max\": 300.49\n}\n```\n\n## Considerações de Implementação\n\n### Validação das Transações\n\nAs transações são validadas com os seguintes critérios:\n\n- O campo `valor` não pode ser negativo.\n- O campo `dataHora` não pode ser no futuro.\n- O valor da transação deve ser maior ou igual a 0.\n\n### Armazenamento em Memória\n\nAs 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.\n\n### Estatísticas\n\nAs 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.\n\n## Dependências Utilizadas\n\nEste projeto utiliza as seguintes dependências do **Spring Boot**:\n\n```xml\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n        \u003cartifactId\u003espring-boot-starter-validation\u003c/artifactId\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n        \u003cartifactId\u003espring-boot-starter-web\u003c/artifactId\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n        \u003cartifactId\u003espring-boot-devtools\u003c/artifactId\u003e\n        \u003cscope\u003eruntime\u003c/scope\u003e\n        \u003coptional\u003etrue\u003c/optional\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n        \u003cartifactId\u003espring-boot-starter-test\u003c/artifactId\u003e\n        \u003cscope\u003etest\u003c/scope\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\nEssas dependências garantem o funcionamento da API, validação dos dados, e ferramentas de desenvolvimento e teste para o projeto.\n\n## Contribuindo\n\nSinta-se à vontade para abrir issues ou enviar pull requests com melhorias, correções ou novas funcionalidades.\n\n## Licença\n\nEste projeto está licenciado sob a MIT License - veja o arquivo [LICENSE](LICENSE) para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleandrordg%2Fspringboot-desafio-itau","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleandrordg%2Fspringboot-desafio-itau","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleandrordg%2Fspringboot-desafio-itau/lists"}