{"id":27598044,"url":"https://github.com/pierrialexandervidmar/desafio-itau","last_synced_at":"2026-04-29T20:06:28.672Z","repository":{"id":289087624,"uuid":"970068550","full_name":"pierrialexandervidmar/desafio-itau","owner":"pierrialexandervidmar","description":"Este desafio propõe a criação de uma API REST focada tanto no desenvolvimento quanto na engenharia de software.","archived":false,"fork":false,"pushed_at":"2025-04-21T18:17:30.000Z","size":24,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-22T14:09:35.873Z","etag":null,"topics":["java","rest-api","spring","spring-validation"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pierrialexandervidmar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-04-21T12:15:35.000Z","updated_at":"2025-04-21T18:17:33.000Z","dependencies_parsed_at":"2025-04-21T13:44:22.449Z","dependency_job_id":"33a48412-9ab0-4d9c-b025-7b4257ae46da","html_url":"https://github.com/pierrialexandervidmar/desafio-itau","commit_stats":null,"previous_names":["pierrialexandervidmar/desafio-itau"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pierrialexandervidmar%2Fdesafio-itau","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pierrialexandervidmar%2Fdesafio-itau/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pierrialexandervidmar%2Fdesafio-itau/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pierrialexandervidmar%2Fdesafio-itau/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pierrialexandervidmar","download_url":"https://codeload.github.com/pierrialexandervidmar/desafio-itau/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250255697,"owners_count":21400410,"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","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":["java","rest-api","spring","spring-validation"],"created_at":"2025-04-22T14:09:40.948Z","updated_at":"2026-04-29T20:06:21.611Z","avatar_url":"https://github.com/pierrialexandervidmar.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Itaú Unibanco — Desafio de Programação\n\nSeja bem-vindo(a)! Este desafio propõe a criação de uma API REST focada tanto no desenvolvimento quanto na engenharia de software. Queremos avaliar sua capacidade de construir uma solução completa e bem estruturada.\n\n---\n\n## Índice\n\n1. [Introdução](#1-introdução)\n2. [Definição do Desafio](#2-definição-do-desafio)\n   1. [Restrições Técnicas](#21-restrições-técnicas)\n   2. [Endpoints da API](#22-endpoints-da-api)\n      1. [Receber Transações: POST /transacao](#221-receber-transações-post-transacao)\n      2. [Limpar Transações: DELETE /transacao](#222-limpar-transações-delete-transacao)\n      3. [Consultar Estatísticas: GET /estatistica](#223-consultar-estatísticas-get-estatistica)\n3. [Extras (Diferenciais)](#4-extras-diferenciais)\n4. [Considerações Finais](#5-considerações-finais)\n\n---\n\n## 1. Introdução\n\nSua missão é construir uma **API REST** que:\n\n- Receba transações financeiras\n- Calcule estatísticas com base nas transações recebidas\n\nA implementação deve ser feita em **Java** ou **[Kotlin](https://kotlinlang.org/)** utilizando **Spring Boot**.\n\nUm bom ponto de partida: [Spring Initializr](https://start.spring.io/).\n\n\u003e **Importante:** Não existe uma única solução correta!  \n\u003e Avaliaremos critérios como qualidade e clareza do código, organização do projeto, testes, segurança, boas práticas de desenvolvimento, entre outros.\n\n---\n\n## 2. Definição do Desafio\n\nVocê deve criar uma API REST hospedada em um repositório público no [GitHub](https://github.com/) ou [GitLab](https://gitlab.com/).\n\n### 2.1. Restrições Técnicas\n\n- **Deve** estar em repositório próprio (não faça fork).\n- **Deve** conter pelo menos 1 commit por endpoint (mínimo de 3 commits).\n- Todos os commits devem ser feitos pelo mesmo usuário que criou o repositório.\n- **Deve** seguir exatamente o formato de endpoints e campos conforme descrito.\n- **Não deve** utilizar bancos de dados ou caches externos — tudo deve ser armazenado **em memória**.\n- **Deve** aceitar e retornar apenas dados no formato **JSON**.\n\n\u003e **Atenção:** O projeto precisa ser **público** para a avaliação. Após ser corrigido, você pode torná-lo privado.\n\n---\n\n## 3. Endpoints da API\n\n### 3.1. Receber Transações: `POST /transacao`\n\nRecebe uma transação contendo:\n\n```json\n{\n  \"valor\": 123.45,\n  \"dataHora\": \"2020-08-07T12:34:56.789-03:00\"\n}\n```\n\n| Campo      | Tipo           | Obrigatório | Descrição                                      |\n|------------|----------------|-------------|------------------------------------------------|\n| `valor`    | Decimal         | Sim         | Valor da transação                             |\n| `dataHora` | ISO 8601 (data)  | Sim         | Data e hora em que a transação ocorreu          |\n\n**Regras de validação:**\n- `valor` e `dataHora` devem estar preenchidos.\n- A `dataHora` **não** pode ser futura.\n- `valor` **não** pode ser negativo (valor ≥ 0).\n\n**Respostas esperadas:**\n- `201 Created` — Transação registrada com sucesso.\n- `422 Unprocessable Entity` — Dados inválidos (ex.: valor negativo ou data futura).\n- `400 Bad Request` — Requisição inválida (ex.: JSON mal formatado).\n\n\u003e **Dica:** No Spring Boot, o tipo `OffsetDateTime` é ideal para trabalhar com datas no padrão ISO 8601.\n\n---\n\n### 3.2. Limpar Transações: `DELETE /transacao`\n\nRemove todas as transações armazenadas.\n\n**Resposta esperada:**\n- `200 OK` — Todas as informações foram apagadas com sucesso.\n\n---\n\n### 3.3. Consultar Estatísticas: `GET /estatistica`\n\nCalcula e retorna estatísticas das transações realizadas nos últimos **60 segundos**:\n\n```json\n{\n  \"count\": 10,\n  \"sum\": 1234.56,\n  \"avg\": 123.456,\n  \"min\": 12.34,\n  \"max\": 123.56\n}\n```\n\n| Campo  | Tipo     | Descrição                                    |\n|--------|----------|----------------------------------------------|\n| `count`| Inteiro  | Número de transações                         |\n| `sum`  | Decimal  | Soma dos valores transacionados              |\n| `avg`  | Decimal  | Média dos valores transacionados             |\n| `min`  | Decimal  | Menor valor transacionado                    |\n| `max`  | Decimal  | Maior valor transacionado                    |\n\n**Observações:**\n- Se não houver transações nos últimos 60 segundos, todos os campos devem ser retornados com valor `0`.\n- **Dica:** `DoubleSummaryStatistics` do Java pode facilitar esse cálculo.\n\n**Resposta esperada:**\n- `200 OK` — Estatísticas retornadas corretamente.\n\n---\n\n## 4. Extras (Diferenciais)\n\nSe quiser se destacar ainda mais, você pode implementar alguns (ou todos) destes extras:\n\n1. **Testes Automatizados**  \n   Unitários e de integração, cobrindo tanto casos positivos quanto negativos.\n\n2. **Containerização**  \n   Disponibilizar a aplicação em um container Docker (não é necessário publicar a imagem).\n\n3. **Logs**  \n   Registrar logs para rastrear o funcionamento da aplicação.\n\n4. **Observabilidade**  \n   Implementar um endpoint de **healthcheck** para monitorar a saúde da aplicação.\n\n5. **Performance**  \n   Medir o tempo de execução da geração de estatísticas.\n\n6. **Tratamento Personalizado de Erros**  \n   Substituir os erros padrões por mensagens mais descritivas e adequadas.\n\n7. **Documentação da API**  \n   Utilizar ferramentas como [Swagger](https://swagger.io/) ou [RAML](http://raml.org/) para documentar os endpoints.\n\n8. **Guia de Execução**  \n   Criar um passo a passo para construção e execução da aplicação, facilitando para quem for rodá-la pela primeira vez.\n\n9. **Configuração de Intervalo**  \n   Tornar o intervalo de cálculo das estatísticas configurável (default: 60 segundos, mas podendo ser alterado para 120 segundos, por exemplo).\n\n---\n\n## 5. Considerações Finais\n\nEste desafio é uma excelente oportunidade para demonstrar suas habilidades técnicas, atenção a detalhes e boas práticas de desenvolvimento.  \nCapriche na implementação e na documentação. Boa sorte! 🚀\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpierrialexandervidmar%2Fdesafio-itau","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpierrialexandervidmar%2Fdesafio-itau","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpierrialexandervidmar%2Fdesafio-itau/lists"}