{"id":29665289,"url":"https://github.com/cleosilva/microservices-nttdata","last_synced_at":"2026-04-10T07:03:31.691Z","repository":{"id":304409675,"uuid":"1018447833","full_name":"cleosilva/microservices-nttdata","owner":"cleosilva","description":"Sistema de Catálogo de Produtos e Pedidos baseado em microsserviços Spring Boot/Cloud. Inclui Dockerização, Docker Compose, PostgreSQL e automação CI/CD com Jenkins.","archived":false,"fork":false,"pushed_at":"2025-08-09T15:33:36.000Z","size":177,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-09T16:33:22.427Z","etag":null,"topics":["docker","docker-compose","github-actions","grafana","integration-testing","java","jenkins","postgresql","rabbitmq","spring-boot","spring-cloud","unit-testing"],"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/cleosilva.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-07-12T09:29:29.000Z","updated_at":"2025-08-09T15:33:40.000Z","dependencies_parsed_at":"2025-07-12T23:38:13.069Z","dependency_job_id":"7bd7ac52-2033-4c9f-9ac0-1ed696709075","html_url":"https://github.com/cleosilva/microservices-nttdata","commit_stats":null,"previous_names":["cleosilva/microservices-nttdata"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cleosilva/microservices-nttdata","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleosilva%2Fmicroservices-nttdata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleosilva%2Fmicroservices-nttdata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleosilva%2Fmicroservices-nttdata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleosilva%2Fmicroservices-nttdata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cleosilva","download_url":"https://codeload.github.com/cleosilva/microservices-nttdata/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleosilva%2Fmicroservices-nttdata/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275033177,"owners_count":25393828,"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-09-13T02:00:10.085Z","response_time":70,"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":["docker","docker-compose","github-actions","grafana","integration-testing","java","jenkins","postgresql","rabbitmq","spring-boot","spring-cloud","unit-testing"],"created_at":"2025-07-22T14:00:49.258Z","updated_at":"2026-04-10T07:03:31.403Z","avatar_url":"https://github.com/cleosilva.png","language":"Java","readme":"# 🚀 Microsserviços de Catálogo de Produtos e Simulador de Pedidos\nEste projeto demonstra uma arquitetura de microsserviços moderna, implementada com Spring Boot e Spring Cloud. Ele foca não apenas na funcionalidade, mas também em boas práticas de desenvolvimento, organização de código, e automação de CI/CD, elementos essenciais em ambientes de desenvolvimento ágil e escalável.\n\n## 💡 Visão Geral do Projeto\nA aplicação consiste em dois microsserviços principais que interagem através de um **Service Discovery** e uma **API Gateway**, simulando um sistema de gestão de pedidos com um catálogo de produtos.\n\n### Requisitos Obrigatórios do Desafio (Entregues)\n* **Arquitetura de Microsserviços:** Dois serviços independentes desenvolvidos em Spring Boot.\n\n* **Service Discovery:** Utilização do Spring Cloud Eureka para permitir que os serviços se localizem.\n\n* **API Gateway:** Implementação com Spring Cloud Gateway como ponto de entrada único para todas as requisições.\n\n* **APIs RESTful:** Adere às boas práticas de design de APIs REST.\n\n* **Microsserviço de Catálogo de Produtos (`product-catalog`):**\n\n  * Funcionalidades CRUD (cadastrar, listar, consultar, atualizar, deletar) para produtos (nome, descrição, preço).\n\n  * Endpoint acessível via `/products`.\n\n  * Observação: O requisito original pedia H2 Database, mas foi substituído por **PostgreSQL** para demonstrar persistência em ambiente de produção (detalhes no \"Extras\").\n\n* **Microsserviço de Simulador de Pedidos (`order-simulator`):**\n\n  * Consome o Microsserviço de Catálogo de Produtos para buscar itens disponíveis.\n\n  * Permite simular a criação de um pedido com base em uma lista de IDs de produtos.\n\n  * Não possui persistência de dados própria.\n\n  * Endpoint acessível via `/orders`.\n\n* **Rotas Consistentes:** Todos os endpoints são acessíveis exclusivamente via API Gateway.\n\n  * `/products/**` roteado para `product-catalog`.\n\n  * `/orders/**` roteado para `order-simulator`.\n\n* **Autenticação Simplificada:** Implementada no API Gateway usando Spring Security com um filtro de token fixo (`Authorization: Bearer supersecrettoken123`).\n\n### Arquitetura\n![UML-catalogo-microsservice (5)](https://github.com/user-attachments/assets/8f07f417-c598-412b-b5ec-fc04bc1274f7)\n\n## ✨ Extras Implementados\nPara demonstrar uma compreensão mais profunda de um ambiente de desenvolvimento e deploy moderno, o projeto inclui as seguintes funcionalidades adicionais:\n\n* **Persistência com PostgreSQL (via Docker):** Em vez de H2 (banco de dados em memória), foi configurado um banco de dados PostgreSQL, orquestrado via Docker Compose, para simular um ambiente de produção real com persistência de dados.\n\n* **Dockerização dos Microsserviços:** Cada microsserviço (Eureka Server, Catálogo de Produtos, Simulador de Pedidos, API Gateway) possui seu próprio `Dockerfile` para encapsulamento e portabilidade.\n\n* **Orquestração com Docker Compose:** Utilização de um docker-compose.yml abrangente para subir toda a arquitetura da aplicação (incluindo PostgreSQL, RabbitMQ e todos os microsserviços) com um único comando, facilitando a execução em qualquer ambiente.\n\n* **Mensageria com RabbitMQ:** Implementação de comunicação assíncrona entre os microsserviços usando RabbitMQ. O `order-simulator` publica eventos de \"pedido criado\" que são consumidos pelo `product-catalog`, demonstrando a troca de mensagens para desacoplamento e resiliência entre os serviços.\n* **CI/CD com Jenkins:**\n\n  * Pipeline Jenkins configurada para automatizar o processo de Build, Teste e Publicação (Push) das imagens Docker para o Docker Hub.\n\n  * Isso garante entregas contínuas e um fluxo de trabalho eficiente e testado.\n\n* **Testes Unitários e de Integração:** Inclusão de testes para garantir a robustez e confiabilidade do código.\n\n## 🛠️ Próximos Passos (Evolução Futura)\nEste projeto é uma base sólida e continuará evoluindo com a implementação de:\n\n* **Sistema de Login com Autenticação JWT:** Implementação de um fluxo de autenticação seguro utilizando JSON Web Tokens (JWT) para proteger os endpoints da API, garantindo que apenas usuários autorizados possam acessar os recursos.\n\n* **Monitoramento com Grafana e Prometheus:** Integração de ferramentas de observabilidade para coletar métricas e visualizar o desempenho da aplicação em tempo real.\n\n## 🚀 Como Executar e Testar a Aplicação Localmente\nSiga estes passos para levantar e interagir com toda a arquitetura de microsserviços em sua máquina.\n\n### **Pré-requisitos**\nCertifique-se de que você tem os seguintes softwares instalados em sua máquina:\n\n* **Git:** Para clonar o repositório.\n\n* **Docker Desktop (ou Docker Engine \u0026 Docker Compose):** Para construir e orquestrar os containers da aplicação.\n\n### 1. Clonar o Repositório\n   Abra seu terminal e clone o projeto:\n\n```Bash\ngit clone https://github.com/cleosilva/microservices-nttdata.git\ncd microservices-nttdata\n```\n### 2. Iniciar a Aplicação com Docker Compose\nEste comando puxará as imagens Docker dos microsserviços pré-construídas do Docker Hub (tag `latest`), configurará os serviços de banco de dados e mensageria, e iniciará toda a aplicação.\n\nNo diretório raiz do projeto (`microservices-nttdata`), execute:\n\n````Bash\ndocker-compose up -d\n````\n* Aguarde alguns minutos para que todos os serviços sejam iniciados e registrados no Eureka Server. Você pode acompanhar o progresso com `docker-compose logs -f`.\n\n### 3. Verificar o Status dos Serviços\n   Confirme que todos os containers estão em execução:\n\n````Bash\ndocker-compose ps\n````\nTodos os serviços (`eureka-server`, `api-gateway`, `product-catalog`, `order-simulator`, `postgres`, `rabbitmq`) devem aparecer com o status `Up`.\n\n### 4. Acessar e Testar os Endpoints\nAgora, você pode interagir com a aplicação. O token fixo para autenticação é: `supersecrettoken123`.\n\n#### 1. **Acessar o Painel do Eureka Server:**\n\n* Abra seu navegador e vá para: http://localhost:8761/\n\n* Você verá o painel do Eureka com `PRODUCT-CATALOG`, `ORDER-SIMULATOR`, e `API-GATEWAY` listados como `UP`.\n\n#### 2. Acessar o Painel de Gerenciamento do RabbitMQ:\n   Abra seu navegador e vá para: http://localhost:15672/\n\nUse as credenciais padrão: `guest` / `guest`. Você poderá ver as filas, exchanges e a atividade das mensagens.\n\n#### 3. **Testar o Endpoint de Cadastro de Produto (via API Gateway):**\n\n* Endpoint: `POST /products`\n\n* Corpo: { \"name\": \"Notebook Gamer\", \"description\": \"Notebook de alta performance\", \"price\": 5000.00 }\n\n* Headers: `Authorization: Bearer supersecrettoken123`\n\n````Bash\ncurl -X POST \\\n-H \"Content-Type: application/json\" \\\n-H \"Authorization: Bearer supersecrettoken123\" \\\n-d '{ \"name\": \"Notebook Gamer\", \"description\": \"Notebook de alta performance\", \"price\": 5000.00 }' \\\nhttp://localhost:8700/products\n````\n#### 3. Testar o Endpoint de Listagem de Produtos (via API Gateway):\n\n* Endpoint: `GET /products`\n\n* Headers: `Authorization: Bearer supersecrettoken123`\n\n````Bash\ncurl -X GET \\\n-H \"Authorization: Bearer supersecrettoken123\" \\\nhttp://localhost:8700/products\n````\n* Você deverá ver o produto cadastrado anteriormente.\n\n#### 4. Testar a Simulação de Pedido (via API Gateway):\n\n* Endpoint: `POST /orders/simulate`\n\n* Corpo: `[1]` (assumindo que o produto com ID 1 foi cadastrado).\n\n* Headers: `Authorization: Bearer supersecrettoken123`\n\n````Bash\ncurl -X POST \\\n-H \"Content-Type: application/json\" \\\n-H \"Authorization: Bearer supersecrettoken123\" \\\n-d '[1]' \\\nhttp://localhost:8700/orders/simulate\n````\n* Você receberá um JSON com o pedido simulado, incluindo o item do catálogo.\n* **Observação sobre a mensageria:** Após simular um pedido, você pode verificar os logs do container product-catalog para ver a mensagem do evento de pedido sendo consumida. Abra um novo terminal e execute:\n````bash\ndocker-compose logs -f product-catalog\n````\n* Você deverá ver a saída \"Microsserviço Product Catalog recebeu evento de pedido...\" nos logs.\n### 5. Parar e Remover a Aplicação (Limpeza)\n   Para derrubar todos os containers e limpar o ambiente após o teste:\n\nNo diretório raiz do projeto, execute:\n\n```Bash\ndocker-compose down\n````\n\n## 🙋 Contato\n### Desenvolvido por:\n\nCleo Silva\n\nhttps://www.linkedin.com/in/cleo-silva\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcleosilva%2Fmicroservices-nttdata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcleosilva%2Fmicroservices-nttdata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcleosilva%2Fmicroservices-nttdata/lists"}