{"id":26452010,"url":"https://github.com/danilomeneghel/prova-ambev","last_synced_at":"2026-04-11T18:02:41.005Z","repository":{"id":282784490,"uuid":"949487055","full_name":"danilomeneghel/prova-ambev","owner":"danilomeneghel","description":"Cadastro de Pedidos","archived":false,"fork":false,"pushed_at":"2025-04-01T17:52:02.000Z","size":1906,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T18:49:58.731Z","etag":null,"topics":["api-rest","docker-compose","h2-database","jakarta","java21","junit5","kafka","lombok","maven","mockito","mysql8","spring-boot","swagger-ui","zookeeper"],"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/danilomeneghel.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}},"created_at":"2025-03-16T15:18:44.000Z","updated_at":"2025-04-01T17:52:05.000Z","dependencies_parsed_at":"2025-04-01T18:33:10.304Z","dependency_job_id":"4bbcdf6a-fe66-4b33-ac88-10e38cd94576","html_url":"https://github.com/danilomeneghel/prova-ambev","commit_stats":null,"previous_names":["danilomeneghel/prova-ambev"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/danilomeneghel/prova-ambev","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilomeneghel%2Fprova-ambev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilomeneghel%2Fprova-ambev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilomeneghel%2Fprova-ambev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilomeneghel%2Fprova-ambev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danilomeneghel","download_url":"https://codeload.github.com/danilomeneghel/prova-ambev/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilomeneghel%2Fprova-ambev/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266775383,"owners_count":23982273,"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-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["api-rest","docker-compose","h2-database","jakarta","java21","junit5","kafka","lombok","maven","mockito","mysql8","spring-boot","swagger-ui","zookeeper"],"created_at":"2025-03-18T17:25:48.409Z","updated_at":"2026-04-11T18:02:40.902Z","avatar_url":"https://github.com/danilomeneghel.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Prova Ambev\n\nAvaliação técnica de uma API de Cadastro de Pedidos, desenvolvido em Java com Spring-Boot.\n\n\n## Características\n\n- API RESTful\n- Validation\n- Service Registry\n- Service Discovery\n- Message Queue\n- MockMVC\n- Clean Code\n\n## Requisitos\n\n- Java JDK 21\n- Apache Maven \u003e= 3.9.8\n- PostgreSql 16\n- Zookeeper 3.8.0\n- Kafka 3.3.2\n- Docker (Opcional)\n\n\n## Tecnologias\n\n- Java\n- JPA\n- Hibernate\n- Maven\n- Spring\n- Lombok\n- Jakarta\n- JSON\n- PostgreSql\n- JUnit\n- Zookeeper\n- Kafka\n- Docker\n\n\n## Instalação\n\n```\ngit clone https://github.com/danilomeneghel/prova-ambev.git\n\ncd prova-ambev\n```\n\n\n## PostgreSql\n\nAbra seu PostgreSql e crie as 2 bases de dados:\n\norder_db \u003cbr\u003e\nproduct_db\u003cbr\u003e\n\nCaso não tenha o PostgreSql 16 instalado, execute o seguinte comando Docker:\n\n```\ndocker network create app_network\n\nsudo docker run \\\n  --name postgres_ambev \\\n  --network app_network \\\n  -p 5432:5432 \\\n  -v /postgres/files/postgres-data:/var/lib/postgresql/data \\\n  -e POSTGRES_USER=root \\\n  -e POSTGRES_PASSWORD=secret \\\n  -e POSTGRES_DB=order_db \\\n  -d postgres:16\n\nuntil docker exec -it postgres_ambev pg_isready -U root; do sleep 2; done\n\ndocker exec -it postgres_ambev psql -U root -d postgres -qAt -c \"SELECT 1 FROM pg_database WHERE datname = 'product_db';\" | grep -q 1 || \\\ndocker exec -it postgres_ambev psql -U root -d postgres -c \"CREATE DATABASE product_db;\"\n```\n\n\n## Zookeeper\n\nRode o Zookeeper.\u003cbr\u003e\nCaso não tenha o Zookeeper instalado, execute o seguinte comando Docker:\n\n```\ndocker run -d \\\n  --name zookeeper_ambev \\\n  --network app_network \\\n  -p 2181:2181 \\\n  -e ALLOW_ANONYMOUS_LOGIN=yes \\\n  bitnami/zookeeper:3.8.0\n```\n\nPara verificar os serviços registrados dentro do container Zookeeper, utilize o comando:\n\n```\ndocker exec -it zookeeper_ambev /bin/bash\nzkCli.sh\nls /services\n```\n\nPara ver se o serviço product-service foi registrado corretamente, utilize o comando:\n```\nls /services/product-service\n```\n\nApós isso ele mostrará um ID único, onde com esse ID poderá ver todos os dados salvo desse serviço:\n\n```\nget /services/product-service/25626c1b-8678-4cfd-a3a8-d5538976b1cd\n```\n\n\n## Kafka\n\nRode o Kafka.\u003cbr\u003e\nCaso não tenha o Kafka instalado, execute o seguinte comando Docker:\n\n```\ndocker run -d \\\n  --name kafka_ambev \\\n  --network app_network \\\n  -p 9092:9092 \\\n  -e KAFKA_BROKER_ID=1 \\\n  -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper_ambev:2181 \\\n  -e KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092 \\\n  -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \\\n  -e ALLOW_PLAINTEXT_LISTENER=yes \\\n  bitnami/kafka:3.3.2\n```\n\n\n## Maven\n\nPara carregar o projeto, digite no terminal:\n\n```\ncd order-service\nmvn clean spring-boot:run -Dspring-boot.run.profiles=dev\n```\n\nAguarde carregar todo o serviço web. \u003cbr\u003e\nApós concluído, digite o endereço abaixo em seu navegador: \u003cbr\u003e\n\nhttp://localhost:8080/order \u003cbr\u003e\n\n\n```\ncd product-service\nmvn clean spring-boot:run -Dspring-boot.run.profiles=dev\n```\n\nAguarde carregar todo o serviço web. \u003cbr\u003e\nApós concluído, digite o endereço abaixo em seu navegador: \u003cbr\u003e\n\nhttp://localhost:8081/product \u003cbr\u003e\n\n\n## Spring Actuator\n\nPara listar os endpoints habilitados, acesse o seguinte endereço:\n\nhttp://localhost:8080/actuator \u003cbr\u003e\n\n\nPara verificar o status da aplicação, acesse o endereço:\n\nhttp://localhost:8080/actuator/health \u003cbr\u003e\n\n\nPara verificar as informações do ambiente, acesse o endereço:\n\nhttp://localhost:8080/actuator/env \u003cbr\u003e\n\n\n## Docker (Opcional)\n\nPara rodar o projeto via Docker, bastar executar o seguinte comando:\n\n```\ndocker compose up\n```\n\nAguarde baixar as dependências e carregar todo o projeto, esse processo é demorado. \u003cbr\u003e\nCaso conclua e não rode pela primeira vez, tente novamente executando o mesmo comando. \u003cbr\u003e\n\nPara encerrar tudo digite:\n\n```\ndocker compose down\n```\n\n\n## Swagger\n\nDocumentação da API RESTful:\n\nhttp://localhost:8080/swagger-ui.html\n\n\n## Testes\n\nPara realizar os testes, execute o seguinte comando no terminal:\n\n```\ncd order-service\nmvn test\n```\n\n\n## Uso da Messageria Kafka\n\nAo utilizar o Apache Kafka para lidar com alta disponibilidade e alto volume de dados, a melhor opção geralmente é priorizar o envio dos dados para o Kafka antes de persistir no banco de dados. Essa abordagem aproveita as características do Kafka para garantir a resiliência e a escalabilidade do sistema.\u003cbr\u003e \n\nVantagens de Enviar para o Kafka Primeiro:\u003cbr\u003e \n\n- Alta Disponibilidade e Tolerância a Falhas\u003cbr\u003e\nO Kafka é projetado para ser altamente distribuído e tolerante a falhas.\u003cbr\u003e \nAo replicar dados entre brokers, ele garante que os dados não sejam perdidos, mesmo se um ou mais brokers falharem.\u003cbr\u003e\nIsso é crucial em cenários de alto volume, onde a perda de dados pode ter impactos significativos.\u003cbr\u003e\n\n- Escalabilidade\u003cbr\u003e\nO Kafka permite escalar horizontalmente, adicionando mais brokers ao cluster conforme necessário.\u003cbr\u003e \nIsso o torna ideal para lidar com volumes crescentes de dados.\u003cbr\u003e\nEssa escalabilidade garante que o sistema possa manter o desempenho mesmo sob cargas pesadas.\u003cbr\u003e\n\n- Desacoplamento e Processamento Assíncrono\u003cbr\u003e\nO Kafka desacopla os produtores de dados dos consumidores, permitindo que os dados sejam processados de forma assíncrona.\u003cbr\u003e\nIsso melhora o desempenho geral do sistema, pois os produtores não precisam esperar que os dados sejam persistidos no banco de dados antes de continuar.\u003cbr\u003e\n\n- Retenção de Dados\u003cbr\u003e\nO Kafka armazena os dados por um período configurável, permitindo que os consumidores processem os dados em seu próprio ritmo e até mesmo reprocessem os dados se necessário.\n\n\n## Screenshots\n\nSwagger-UI \u003cbr\u003e\n![Screenshots](screenshots/screenshot01.png) \u003cbr\u003e\u003cbr\u003e\n\nModelagem ER \u003cbr\u003e\n![Screenshots](screenshots/screenshot02.png) \u003cbr\u003e\u003cbr\u003e\n\nTestes Unitários \u003cbr\u003e\n![Screenshots](screenshots/screenshot03.png) \u003cbr\u003e\u003cbr\u003e\n\nAplicação Spring Boot \u003cbr\u003e\n![Screenshots](screenshots/screenshot04.png) \u003cbr\u003e\u003cbr\u003e\n\n\n## Licença\n\nProjeto licenciado sob \u003ca href=\"LICENSE\"\u003eThe MIT License (MIT)\u003c/a\u003e.\u003cbr\u003e\u003cbr\u003e\n\n\nDesenvolvido por\u003cbr\u003e\nDanilo Meneghel\u003cbr\u003e\ndanilo.meneghel@gmail.com\u003cbr\u003e\nhttp://danilomeneghel.github.io/\u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanilomeneghel%2Fprova-ambev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanilomeneghel%2Fprova-ambev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanilomeneghel%2Fprova-ambev/lists"}