{"id":30178694,"url":"https://github.com/raquelbrto/orders-adapter","last_synced_at":"2026-05-03T22:34:31.727Z","repository":{"id":306095954,"uuid":"1022344460","full_name":"raquelbrto/orders-adapter","owner":"raquelbrto","description":"Orders Adapter API ","archived":false,"fork":false,"pushed_at":"2025-07-23T15:09:59.000Z","size":80,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-12T05:46:02.187Z","etag":null,"topics":["java","mongodb","redis-cache","spring"],"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/raquelbrto.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-07-18T22:13:43.000Z","updated_at":"2025-07-23T15:03:35.000Z","dependencies_parsed_at":"2025-07-23T17:34:30.288Z","dependency_job_id":null,"html_url":"https://github.com/raquelbrto/orders-adapter","commit_stats":null,"previous_names":["raquelbrto/orders-adapter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/raquelbrto/orders-adapter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raquelbrto%2Forders-adapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raquelbrto%2Forders-adapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raquelbrto%2Forders-adapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raquelbrto%2Forders-adapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raquelbrto","download_url":"https://codeload.github.com/raquelbrto/orders-adapter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raquelbrto%2Forders-adapter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32587821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["java","mongodb","redis-cache","spring"],"created_at":"2025-08-12T05:38:22.862Z","updated_at":"2026-05-03T22:34:31.719Z","avatar_url":"https://github.com/raquelbrto.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Orders Adapter API - Desafio \n\nAPI REST desenvolvida com Java 17 e Spring Boot, a API recebe um arquivo de\npedidos desnormalizado e retorna um json normalizado seguindo os padrões dos requisitos do desafio.\n\n## Tecnologias Utilizadas\n\n* Java 17\n* Spring\n* MongoDB\n* Redis\n* Docker\n* JUnit\n* Mockito\n\n## Variáveis de Ambiente\n\n- Java: JDK 17.\n- Git: Para clonar o repositório.\n- Docker: Para rodar a aplicação em um container.\n\n##  Configuração do Projeto\n\n1. Clone o Repositório\n\n        git clone git@github.com:raquelbrto/orders-adapter.git\n\n2. Acesse o diretorio\n\n        cd orders-adapter\n\n3. Crie a imagem docker\n\n   ```bash\n   docker build -t orders-adapter .\n   ```\n\n4. Execute\n\n   ```bash\n   docker compose up --build\n   ```   \n\n# Documentação da API\n\n## Orders\n\n### Processa arquivo e retornar pedidos normalizados\n\nRecebe o arquivo de dados desnormalizado e retorna a resposta em json contendo os dados dos pedidos normalizados. \n\n| Parâmetro  | Tipo             | Descrição                           |\n   |:-----------|:-----------------| :---------------------------------- |\n| `file`     | `txt`            | **Obrigatório**. Arquivo de texto de pedidos desnormalizado.\n\n```bash\ncurl --request POST \\\n  --url http://localhost:8085/api/v1/orders \\\n  --header 'Content-Type: multipart/form-data' \\\n  --form file=@/caminho_do_arquivo/data_1.txt\n```\n\nExemplo de resposta:\n\n```json\n[\n  {\n    \"user_id\": 1,\n    \"name\": \"Sammie Baumbach\",\n    \"orders\": [\n      {\n        \"order_id\": 2,\n        \"total\": 2966.46,\n        \"date\": \"2021-10-28\",\n        \"products\": [\n          {\n            \"product_id\": 2,\n            \"value\": 798.03\n          },\n          {\n            \"product_id\": 5,\n            \"value\": 1567.00\n          },\n          {\n            \"product_id\": 2,\n            \"value\": 601.43\n          }\n        ]\n      },\n      {\n        \"order_id\": 9,\n        \"total\": 3164.43,\n        \"date\": \"2021-04-14\",\n        \"products\": [\n          {\n            \"product_id\": 1,\n            \"value\": 1465.30\n          },\n          {\n            \"product_id\": 1,\n            \"value\": 973.27\n          },\n          {\n            \"product_id\": 2,\n            \"value\": 725.86\n          }\n        ]\n      },\n      {\n        \"order_id\": 10,\n        \"total\": 2739.77,\n        \"date\": \"2021-06-23\",\n        \"products\": [\n          {\n            \"product_id\": 4,\n            \"value\": 590.04\n          },\n          {\n            \"product_id\": 3,\n            \"value\": 499.87\n          },\n          {\n            \"product_id\": 3,\n            \"value\": 1649.86\n          }\n        ]\n      }\n    ]\n  },\n  {\n    \"user_id\": 2,\n    \"name\": \"Augustus Aufderhar\",\n    \"orders\": [\n      {\n        \"order_id\": 17,\n        \"total\": 274.31,\n        \"date\": \"2021-07-14\",\n        \"products\": [\n          {\n            \"product_id\": 3,\n            \"value\": 274.31\n          }\n        ]\n      },\n      {\n        \"order_id\": 18,\n        \"total\": 538.18,\n        \"date\": \"2021-07-13\",\n        \"products\": [\n          {\n            \"product_id\": 1,\n            \"value\": 538.18\n          }\n        ]\n      },\n      {\n        \"order_id\": 19,\n        \"total\": 1548.98,\n        \"date\": \"2021-09-02\",\n        \"products\": [\n          {\n            \"product_id\": 4,\n            \"value\": 1548.98\n          }\n        ]\n      }\n    ]\n  }\n]\n```\n\n### Find by id\n\nBuscar o pedido pelo id.\n\n| Parâmetro | Tipo  | Descrição                           |\n   |:----------|:------| :---------------------------------- |\n| `id`      | `int` | **Obrigatório**. Id do pedido.\n\n```bash\ncurl --request GET \\\n  --url http://localhost:8085/api/v1/orders/2 \\\n```\nExemplo de resposta:\n\n```json\n{\n\t\"order_id\": 2,\n\t\"total\": 2966.46,\n\t\"date\": \"2021-10-28\",\n\t\"products\": [\n\t\t{\n          \"product_id\": 2,\n          \"value\": 798.03\n\t\t},\n\t\t{\n          \"product_id\": 5,\n          \"value\": 1567.00\n\t\t},\n\t\t{\n          \"product_id\": 2,\n          \"value\": 601.43\n\t\t}\n\t],\n\t\"user_id\": 1,\n\t\"name\": \"Sammie Baumbach\"\n}\n```\n\n### List\n\nRetorna todos os pedidos se nâo for passado o filtro de intervalo de data de compra(start date e end date)\n\n| Parâmetro | Tipo   | Descrição                           |\n   |:----------|:-------| :---------------------------------- |\n| `start_date`      | `Date` | **Opcional**. Data de início no formato `yyyy-MM-dd`.\n| `end_date`      | `Date` | **Opcional**. Data fim no formato `yyyy-MM-dd`.\n\n```bash\ncurl --request GET \\\n  --url 'http://localhost:8085/api/v1/orders?start_date=2020-01-01\u0026end_date=2025-09-01' \\\n```\nExemplo de resposta:\n\n```json\n[\n  {\n    \"user_id\": 1,\n    \"name\": \"Sammie Baumbach\",\n    \"orders\": [\n      {\n        \"order_id\": 2,\n        \"total\": 2966.46,\n        \"date\": \"2021-10-28\",\n        \"products\": [\n          {\n            \"product_id\": 2,\n            \"value\": 798.03\n          },\n          {\n            \"product_id\": 5,\n            \"value\": 1567.00\n          },\n          {\n            \"product_id\": 2,\n            \"value\": 601.43\n          }\n        ]\n      },\n      {\n        \"order_id\": 9,\n        \"total\": 3164.43,\n        \"date\": \"2021-04-14\",\n        \"products\": [\n          {\n            \"product_id\": 1,\n            \"value\": 1465.30\n          },\n          {\n            \"product_id\": 1,\n            \"value\": 973.27\n          },\n          {\n            \"product_id\": 2,\n            \"value\": 725.86\n          }\n        ]\n      },\n      {\n        \"order_id\": 10,\n        \"total\": 2739.77,\n        \"date\": \"2021-06-23\",\n        \"products\": [\n          {\n            \"product_id\": 4,\n            \"value\": 590.04\n          },\n          {\n            \"product_id\": 3,\n            \"value\": 499.87\n          },\n          {\n            \"product_id\": 3,\n            \"value\": 1649.86\n          }\n        ]\n      }\n    ]\n  },\n  {\n    \"user_id\": 2,\n    \"name\": \"Augustus Aufderhar\",\n    \"orders\": [\n      {\n        \"order_id\": 17,\n        \"total\": 274.31,\n        \"date\": \"2021-07-14\",\n        \"products\": [\n          {\n            \"product_id\": 3,\n            \"value\": 274.31\n          }\n        ]\n      },\n      {\n        \"order_id\": 18,\n        \"total\": 538.18,\n        \"date\": \"2021-07-13\",\n        \"products\": [\n          {\n            \"product_id\": 1,\n            \"value\": 538.18\n          }\n        ]\n      },\n      {\n        \"order_id\": 19,\n        \"total\": 1548.98,\n        \"date\": \"2021-09-02\",\n        \"products\": [\n          {\n            \"product_id\": 4,\n            \"value\": 1548.98\n          }\n        ]\n      }\n    ]\n  }\n]\n```\n\n## Swagger\n\nAcesse a documentação em: [`swagger-ui/index.html`](http://localhost:8085/swagger-ui/index.html)\n\n## Analises\n\nDurante a leitura e entendimento do desafio e dos arquivos percebi, alem de que cada linha contem uma parte do pedido \nlogo sendo necessario agrupar os produtos dos pedidos pelo orderId, que nos pedidos existem produtos com o mesmo id \nmas com preços diferentes, logo foi decidido nao salvar produto como documento nem usuario, API vai guardar so os pedidos como documento no MongoDB e \nretornar os dados normalizados. É possivel vizualizar um pouco de como foi pensado o desenvolvimento pelas issues.\n\nForam feitos testes unitarios e de integração, é possivel ver o relatorio dos testes baixando o artefato jacoco-report gerado \npelo git hub actions ou quando rodar o projeto localmente.\n\n# Docker hub\n\nImagem disponivel em: [`rakeobrto/orders-adapter`](https://hub.docker.com/r/rakeobrto/orders-adapter)\n\nBaixe a imagem:\n\n   ```bash\n   docker pull rakeobrto/orders-adapter:latest\n   ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraquelbrto%2Forders-adapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraquelbrto%2Forders-adapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraquelbrto%2Forders-adapter/lists"}