{"id":30351816,"url":"https://github.com/nirmalks/bookstore-microservices","last_synced_at":"2026-05-03T23:31:56.399Z","repository":{"id":309670888,"uuid":"1037118955","full_name":"nirmalks/bookstore-microservices","owner":"nirmalks","description":"Microservices version of the bookstore. Converted from the monolith version - https://github.com/nirmalks/bookstore-spring-be","archived":false,"fork":false,"pushed_at":"2025-11-19T10:05:18.000Z","size":249,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-19T12:06:47.247Z","etag":null,"topics":["java","spring-boot","spring-boot-cloud","spring-boot-oauth2","spring-cloud","spring-cloud-gateway","spring-data-jpa","spring-eureka","spring-mvc","swagger"],"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/nirmalks.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-13T05:13:00.000Z","updated_at":"2025-11-19T10:05:22.000Z","dependencies_parsed_at":"2025-08-13T07:22:59.535Z","dependency_job_id":"8db93f34-1849-484d-a001-4ddb808d4e34","html_url":"https://github.com/nirmalks/bookstore-microservices","commit_stats":null,"previous_names":["nirmalks/bookstore-microservices"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nirmalks/bookstore-microservices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirmalks%2Fbookstore-microservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirmalks%2Fbookstore-microservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirmalks%2Fbookstore-microservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirmalks%2Fbookstore-microservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nirmalks","download_url":"https://codeload.github.com/nirmalks/bookstore-microservices/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nirmalks%2Fbookstore-microservices/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32589045,"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","spring-boot","spring-boot-cloud","spring-boot-oauth2","spring-cloud","spring-cloud-gateway","spring-data-jpa","spring-eureka","spring-mvc","swagger"],"created_at":"2025-08-19T00:00:38.818Z","updated_at":"2026-05-03T23:31:56.394Z","avatar_url":"https://github.com/nirmalks.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"Bookstore APi using Microservices\n\n- Bookstore API using microservices architecture . Converted from the monolith version -https://github.com/nirmalks/bookstore-spring-be\n- Backend Stack: Spring Boot, Spring Security (JWT), Spring Data JPA, PostgreSQL, Flyway, Spring Eureka client, Spring Eureka server, Spring Cloud gateway, Spring Boot Oauth2, Spring Webflux\n- Tools \u0026 Libraries: Swagger\n\nKey Features\n\n* RESTful APIs for managing books, authors, users, orders, carts, and genres\n* JWT-based authentication and role-based authorization (user, admin)\n* Advanced book search with filtering and pagination using JPA Specifications\n* Swagger documentation for API testing\n* Flyway integration for consistent DB migrations\n  \nAdmin Capabilities\n* Add or update books, authors, and genres\n\nUser Capabilities\n* Register, log in, and manage account profile\n* Browse and search books\n* Add items to cart and place orders\n* View orders\n\n## Running with Docker\n\nThis project is containerized using Docker and Docker Compose. It includes the Microservices (Spring Boot), Databases (PostgreSQL), and Observability stack (Prometheus, Grafana, Zipkin).\n\n### Prerequisites\n* [Docker](https://www.docker.com/get-started) and [Docker Compose](https://docs.docker.com/compose/install/) installed on your machine.\n* Java 17+ (if running Maven locally).\n\n### 1. Build the Artifacts\nBefore building the Docker images, ensure the JAR files are generated for each service. Run the following command from the root directory:\n\n```bash\n./mvnw clean package -DskipTests\n```\n2. Directory Setup\n\nEnsure the following monitoring configuration files exist in the root directory before starting:\n\nprometheus.yml\nalert.rules.yml\nalertmanager/alertmanager.yml\n\n3. Start the Containers\n\nBuild the images and start all infrastructure services:\n```bash\ndocker-compose up -d --build\n```\n4. Startup Sequence\n\nDatabases (User, Catalog, Checkout) initialize.\nDiscovery Service (Eureka) starts.\nConfig Server waits for Discovery.\nMicroservices \u0026 API Gateway start once the core services are healthy.\n\n## Accessing the Application\n\n| Service | URL / Port | Description |\n| :--- | :--- | :--- |\n| API Gateway | http://localhost:8080 | Main entry point for all requests |\n| Eureka Dashboard | http://localhost:8761 | Service Discovery UI |\n| Zipkin | http://localhost:9411 | Distributed Tracing |\n| Grafana | http://localhost:3000 | Metrics Visualization |\n| Prometheus | http://localhost:9090 | Metrics Collection |\n  \n## credentials\n* admin credentials - admin/admin123\n* customer credentials - john_doe/admin123\n\n## swagger\n* User service - http://localhost:8081/swagger-ui/index.html\n* Catalog service - http://localhost:8082/swagger-ui/index.html\n* Checkout service - http://localhost:8083/swagger-ui/index.html\n  \n## Stopping the Application\nTo stop all containers and remove the network:\n\n\n```bash\ndocker-compose down\n```\nTo stop and remove database volumes (reset all data):\n\n```bash\ndocker-compose down -v\n```\n\n## Screenshots\n\n### Zipkin\n\nLog with traceid in gateway\n\u003cimg width=\"1875\" height=\"397\" alt=\"gateway-log\" src=\"https://github.com/user-attachments/assets/dce5c59d-b4cc-4dbe-b0f6-1ca65b1a486d\" /\u003e\n\nQuerying by traceid in zipkin\n\u003cimg width=\"1918\" height=\"831\" alt=\"zipkin-trace\" src=\"https://github.com/user-attachments/assets/972b082d-b8ec-4dff-9e15-f46fd07933d3\" /\u003e\n\n## Swagger screenshots\n\n### catalog service\n\u003cimg width=\"2064\" height=\"4080\" alt=\"localhost_8082_swagger-ui_index html\" src=\"https://github.com/user-attachments/assets/e368cd39-207f-4015-a943-49f15cdb3bb7\" /\u003e\n\n### user service\n\u003cimg width=\"2064\" height=\"3411\" alt=\"localhost_8083_swagger-ui_index html\" src=\"https://github.com/user-attachments/assets/6c08a315-19fa-4bf3-94db-48d0306006ed\" /\u003e\n\n### checkout service\n\u003cimg width=\"2064\" height=\"3216\" alt=\"localhost_8081_swagger-ui_index html\" src=\"https://github.com/user-attachments/assets/d508c08b-ac08-416b-af52-69f225a9b931\" /\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnirmalks%2Fbookstore-microservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnirmalks%2Fbookstore-microservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnirmalks%2Fbookstore-microservices/lists"}