{"id":17655813,"url":"https://github.com/ivkovicstefan/lrn-microservices-eshop","last_synced_at":"2026-04-02T02:50:29.311Z","repository":{"id":259101326,"uuid":"866687326","full_name":"ivkovicstefan/lrn-microservices-eshop","owner":"ivkovicstefan","description":"A practical project done during the \".NET 8 Microservices: DDD, CQRS, Vertical/Clean Architecture\" course created by Mehmet Ozkaya","archived":false,"fork":false,"pushed_at":"2024-11-02T14:18:58.000Z","size":834,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-05T11:37:28.652Z","etag":null,"topics":["clean-architecture","docker","domain-driven-design","grpc","microservices-architecture","postgresql","redis","rest-api","sql-server","sqlite","vertical-slice-architecture"],"latest_commit_sha":null,"homepage":"","language":"C#","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/ivkovicstefan.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":"2024-10-02T17:41:15.000Z","updated_at":"2024-11-17T10:09:22.000Z","dependencies_parsed_at":"2024-12-11T10:42:27.655Z","dependency_job_id":"eee1f6c3-476d-4693-8be1-2179fe51e844","html_url":"https://github.com/ivkovicstefan/lrn-microservices-eshop","commit_stats":null,"previous_names":["ivkovicstefan/lrn-microservices-eshop"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivkovicstefan%2Flrn-microservices-eshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivkovicstefan%2Flrn-microservices-eshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivkovicstefan%2Flrn-microservices-eshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivkovicstefan%2Flrn-microservices-eshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivkovicstefan","download_url":"https://codeload.github.com/ivkovicstefan/lrn-microservices-eshop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246300208,"owners_count":20755307,"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":["clean-architecture","docker","domain-driven-design","grpc","microservices-architecture","postgresql","redis","rest-api","sql-server","sqlite","vertical-slice-architecture"],"created_at":"2024-10-23T13:08:05.015Z","updated_at":"2025-12-30T20:29:27.996Z","avatar_url":"https://github.com/ivkovicstefan.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Eshop On Microservices \n![Static Badge](https://img.shields.io/badge/Learning_Project-21a600)\n![Static Badge](https://img.shields.io/badge/Udemy-A435F0?style=flat\u0026logo=udemy\u0026logoColor=white)\n\nThis project is part of a course called \".NET 8 Microservices: DDD, CQRS, Vertical/Clean Architecture\" created by Mehmet Ozkaya. It represents a practical implementation of microservices architecture using .NET 8, domain-driven design, command and query responsibility segregation pattern (CQRS), vertical slices, and clean architecture.\n\n## Building Blocks\nThe project consists of main services and shared libraries.\n\n### Main Services\n- Catalog.API - Product management service\n- Basket.API - Shopping cart management service\n- Discount.Grpc - Discount management service\n- Ordering.API - Ordering management service\n- YarpApiGateway - Reverse proxy API gateway\n- Shopping.WebApp - Web application for end users\n\n### Shared Projects\n- BuildingBlocks - Holds useful abstractions for CQRS implementation, cross-cutting concerns\n- BuildingBlocks.Messaging - Holds abstractions for message broker and event-driven communication between services\n\n### Backing services\n- CatalogDb - PostgreSQL database\n- BasketDb - PostgreSQL database\n- DiscountDb - SQLite database\n- OrderingDb - SQL Server database\n- DistributedCache - Redis\n- MessageBroker - RabbitMQ broker\n\n### Container Management And Orchestration\n- Docker\n- Docker Compose\n\n## External Architecture Diagram\nThe system is designed with Microservice Architecture, which is followed by both synchronous and asynchronous communication types between services. In picture 1, synchronous communication is highlighted with green, and asynchronous communication is marked with orange color.\n\n![External Architecture](/EShop/docs/images/external-architecture-diagram-dark.png#gh-dark-mode-only)\n![External Architecture](/EShop/docs/images/external-architecture-diagram-light.png#gh-light-mode-only)\n\u003cp align=\"center\"\u003ePicture 1 - External architecture diagram\u003c/p\u003e\n\n## Internal Architecture Diagrams\n### Catalog.API\nCatalog API uses a Vertical Slice Architecture together with a CQRS design pattern. Each slice has its endpoint and request handler. Slices are separated into different folders.\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"/EShop/docs/images/internal-architecture-catalog-api-dark.png#gh-dark-mode-only\"\u003e\n    \u003cimg src=\"/EShop/docs/images/internal-architecture-catalog-api-light.png#gh-light-mode-only\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003ePicture 2 - Catalog.API architecture diagram\u003c/p\u003e\n\n### Basket.API\nBasket API uses a Vertical Slice Architecture together with a CQRS and Repository design pattern. A repository pattern is implemented to add a distributed cache using the Cache-aside pattern. Each slice has its endpoint and request handler. Slices are separated into different folders.\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"/EShop/docs/images/internal-architecture-basket-api-dark.png#gh-dark-mode-only\"\u003e\n    \u003cimg src=\"/EShop/docs/images/internal-architecture-basket-api-light.png#gh-light-mode-only\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003ePicture 3 - Basket.API architecture diagram\u003c/p\u003e\n\n### Discount.Grpc\nDiscount GRPC uses an N-layer Architecture.\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"/EShop/docs/images/internal-architecture-discount-grpc-dark.png#gh-dark-mode-only\"\u003e\n    \u003cimg src=\"/EShop/docs/images/internal-architecture-discount-grpc-light.png#gh-light-mode-only\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003ePicture 4 - Discount.Grpc architecture diagram\u003c/p\u003e\n\n### Ordering.API\nOrdering API uses a Clean Architecture together with CQRS, and a Domain-driven Design.\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"/EShop/docs/images/internal-architecture-ordering-api-dark.png#gh-dark-mode-only\"\u003e\n    \u003cimg src=\"/EShop/docs/images/internal-architecture-ordering-api-light.png#gh-light-mode-only\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003ePicture 5 - Ordering,API architecture diagram\u003c/p\u003e\n\n## Concepts Learned\n1. Microservices Architecture\n2. Vertical Slice Architecture\n3. Clean Architecture\n4. gRPC Services\n5. CQRS Pattern\n6. Mediator Pattern\n7. Proxy Pattern\n8. Decorator Pattern\n9. Cache-aside Pattern\n10. Pub/Sub Pattern\n11. REPR Pattern\n12. API Gateway Pattern\n13. Gateway Routing Pattern\n14. BFF Pattern\n15. Domain-driven Design\n16. RabbitMQ\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivkovicstefan%2Flrn-microservices-eshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivkovicstefan%2Flrn-microservices-eshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivkovicstefan%2Flrn-microservices-eshop/lists"}