# mehmetozkaya/eshopmodularmonoliths architecture

> Architecture diagram of the GitHub repository mehmetozkaya/eshopmodularmonoliths, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mehmetozkaya/eshopmodularmonoliths
- Repository: https://github.com/mehmetozkaya/eshopmodularmonoliths

## Overview

This is a .NET modular-monolith e-shop. The main user journey is adding catalog products to a basket, checking out, and creating an order from the checkout event. Catalog also supports product management and browsing; Basket includes cached storage and price updates; Ordering exposes order management. The README documents Identity, PostgreSQL, Redis, RabbitMQ, and outbox capabilities, but Identity is not present in the supplied tree. Relationships are limited to those shown in excerpts, the source index, or README; unsampled messaging and persistence wiring is not inferred.

Main entry points: [`src/Modules/Catalog/Catalog/Products/Features`](https://github.com/mehmetozkaya/eshopmodularmonoliths/tree/main/src/Modules/Catalog/Catalog/Products/Features) (Product features), [`src/Bootstrapper/Api/Program.cs`](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Bootstrapper/Api/Program.cs) (API host), [`src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs`](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs) (Add basket item), [`src/Modules/Basket/Basket/Basket/Features/CheckoutBasket/CheckoutBasketHandler.cs`](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/Features/CheckoutBasket/CheckoutBasketHandler.cs) (Basket checkout)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and shared"]
  node_api["API host<br/>[Program.cs]"]
  node_cqrs["CQRS contracts<br/>[ICommand.cs]"]
end

subgraph group_catalog["Product catalog"]
  node_catalog_features["Product features"]
  node_product["Product aggregate<br/>[Product.cs]"]
  node_catalog_db[("Catalog database")]
  node_product_contract["Product contract<br/>[ProductDto.cs]"]
end

subgraph group_basket["Basket and checkout"]
  node_basket_features["Basket features"]
  node_add_item["Add basket item"]
  node_cart["Shopping cart<br/>[ShoppingCart.cs]"]
  node_basket_repo["Basket repository"]
  node_cached_repo["Cached repository"]
  node_basket_db[("Basket database<br/>[BasketDbContext.cs]")]
  node_checkout["Basket checkout"]
  node_outbox["Outbox processor<br/>[OutboxProcessor.cs]"]
  node_price_handler["Price update handler"]
end

subgraph group_ordering["Order management"]
  node_order_event_handler["Checkout consumer"]
  node_create_order["Create order"]
  node_order["Order aggregate<br/>[Order.cs]"]
  node_ordering_db[("Ordering database")]
  node_orders_features["Order features"]
end

subgraph group_infra["Messaging and persistence"]
  node_checkout_event["Checkout event"]
  node_price_event["Price change event"]
  node_broker["RabbitMQ broker"]
end

node_shopper(("API user"))

node_shopper -->|"sends requests"| node_api
node_api -->|"registers module"| node_catalog_features
node_api -->|"registers module"| node_basket_features
node_api -->|"registers module"| node_orders_features
node_add_item -->|"loads and saves"| node_basket_repo
node_add_item -->|"queries product"| node_catalog_features
node_add_item -->|"adds item"| node_cart
node_cached_repo -->|"decorates"| node_basket_repo
node_checkout -->|"reads and writes"| node_basket_db
node_checkout -->|"creates message"| node_checkout_event
node_checkout -->|"records message"| node_outbox
node_outbox -.->|"publishes messages"| node_broker
node_broker -.->|"delivers event"| node_order_event_handler
node_order_event_handler -->|"dispatches command"| node_create_order
node_create_order -->|"saves order"| node_ordering_db
node_create_order -->|"creates aggregate"| node_order
node_catalog_features -->|"queries and updates"| node_catalog_db
node_catalog_features -->|"creates and updates"| node_product
node_price_event -->|"updates basket prices"| node_price_handler
node_price_handler -.->|"updates prices"| node_basket_db
node_catalog_features -->|"publishes price change"| node_price_event
node_cqrs -->|"defines command pattern"| node_add_item

click node_api "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Bootstrapper/Api/Program.cs"
click node_cqrs "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Shared/Shared.Contracts/CQRS/ICommand.cs"
click node_catalog_features "https://github.com/mehmetozkaya/eshopmodularmonoliths/tree/main/src/Modules/Catalog/Catalog/Products/Features"
click node_product "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Catalog/Catalog/Products/Models/Product.cs"
click node_catalog_db "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Catalog/Catalog/Data/CatalogDbContext.cs"
click node_product_contract "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Catalog/Catalog.Contracts/Products/Dtos/ProductDto.cs"
click node_basket_features "https://github.com/mehmetozkaya/eshopmodularmonoliths/tree/main/src/Modules/Basket/Basket/Basket/Features"
click node_add_item "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs"
click node_cart "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/Models/ShoppingCart.cs"
click node_basket_repo "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Data/Repository/IBasketRepository.cs"
click node_cached_repo "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Data/Repository/CachedBasketRepository.cs"
click node_basket_db "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Data/BasketDbContext.cs"
click node_checkout "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/Features/CheckoutBasket/CheckoutBasketHandler.cs"
click node_outbox "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Data/Processors/OutboxProcessor.cs"
click node_price_handler "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/EventHandlers/ProductPriceChangedIntegrationEventHandler.cs"
click node_checkout_event "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Shared/Shared.Messaging/Events/BasketCheckoutIntegrationEvent.cs"
click node_price_event "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Shared/Shared.Messaging/Events/ProductPriceChangedIntegrationEvent.cs"
click node_order_event_handler "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Ordering/Ordering/Orders/EventHandlers/BasketCheckoutIntegrationEventHandler.cs"
click node_create_order "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Ordering/Ordering/Orders/Features/CreateOrder/CreateOrderHandler.cs"
click node_order "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Ordering/Ordering/Orders/Models/Order.cs"
click node_ordering_db "https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Ordering/Ordering/Data/OrderingDbContext.cs"
click node_orders_features "https://github.com/mehmetozkaya/eshopmodularmonoliths/tree/main/src/Modules/Ordering/Ordering/Orders/Features"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_cqrs,node_shopper toneBlue
class node_catalog_features,node_product,node_catalog_db,node_product_contract toneAmber
class node_basket_features,node_add_item,node_cart,node_basket_repo,node_cached_repo,node_basket_db,node_checkout,node_outbox,node_price_handler toneMint
class node_order_event_handler,node_create_order,node_order,node_ordering_db,node_orders_features toneRose
class node_checkout_event,node_price_event,node_broker toneIndigo
```

## Components

### API and shared

- [API host](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Bootstrapper/Api/Program.cs): `src/Bootstrapper/Api/Program.cs`
- [CQRS contracts](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Shared/Shared.Contracts/CQRS/ICommand.cs): `src/Shared/Shared.Contracts/CQRS/ICommand.cs`

### Product catalog

- [Product features](https://github.com/mehmetozkaya/eshopmodularmonoliths/tree/main/src/Modules/Catalog/Catalog/Products/Features): `src/Modules/Catalog/Catalog/Products/Features`
- [Product aggregate](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Catalog/Catalog/Products/Models/Product.cs): `src/Modules/Catalog/Catalog/Products/Models/Product.cs`
- [Catalog database](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Catalog/Catalog/Data/CatalogDbContext.cs): `src/Modules/Catalog/Catalog/Data/CatalogDbContext.cs`
- [Product contract](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Catalog/Catalog.Contracts/Products/Dtos/ProductDto.cs): `src/Modules/Catalog/Catalog.Contracts/Products/Dtos/ProductDto.cs`

### Basket and checkout

- [Basket features](https://github.com/mehmetozkaya/eshopmodularmonoliths/tree/main/src/Modules/Basket/Basket/Basket/Features): `src/Modules/Basket/Basket/Basket/Features`
- [Add basket item](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs): `src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs`
- [Shopping cart](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/Models/ShoppingCart.cs): `src/Modules/Basket/Basket/Basket/Models/ShoppingCart.cs`
- [Basket repository](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Data/Repository/IBasketRepository.cs): `src/Modules/Basket/Basket/Data/Repository/IBasketRepository.cs`
- [Cached repository](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Data/Repository/CachedBasketRepository.cs): `src/Modules/Basket/Basket/Data/Repository/CachedBasketRepository.cs`
- [Basket database](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Data/BasketDbContext.cs): `src/Modules/Basket/Basket/Data/BasketDbContext.cs`
- [Basket checkout](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/Features/CheckoutBasket/CheckoutBasketHandler.cs): `src/Modules/Basket/Basket/Basket/Features/CheckoutBasket/CheckoutBasketHandler.cs`
- [Outbox processor](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Data/Processors/OutboxProcessor.cs): `src/Modules/Basket/Basket/Data/Processors/OutboxProcessor.cs`
- [Price update handler](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Basket/Basket/Basket/EventHandlers/ProductPriceChangedIntegrationEventHandler.cs): `src/Modules/Basket/Basket/Basket/EventHandlers/ProductPriceChangedIntegrationEventHandler.cs`

### Order management

- [Checkout consumer](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Ordering/Ordering/Orders/EventHandlers/BasketCheckoutIntegrationEventHandler.cs): `src/Modules/Ordering/Ordering/Orders/EventHandlers/BasketCheckoutIntegrationEventHandler.cs`
- [Create order](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Ordering/Ordering/Orders/Features/CreateOrder/CreateOrderHandler.cs): `src/Modules/Ordering/Ordering/Orders/Features/CreateOrder/CreateOrderHandler.cs`
- [Order aggregate](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Ordering/Ordering/Orders/Models/Order.cs): `src/Modules/Ordering/Ordering/Orders/Models/Order.cs`
- [Ordering database](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Modules/Ordering/Ordering/Data/OrderingDbContext.cs): `src/Modules/Ordering/Ordering/Data/OrderingDbContext.cs`
- [Order features](https://github.com/mehmetozkaya/eshopmodularmonoliths/tree/main/src/Modules/Ordering/Ordering/Orders/Features): `src/Modules/Ordering/Ordering/Orders/Features`

### Messaging and persistence

- [Checkout event](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Shared/Shared.Messaging/Events/BasketCheckoutIntegrationEvent.cs): `src/Shared/Shared.Messaging/Events/BasketCheckoutIntegrationEvent.cs`
- [Price change event](https://github.com/mehmetozkaya/eshopmodularmonoliths/blob/main/src/Shared/Shared.Messaging/Events/ProductPriceChangedIntegrationEvent.cs): `src/Shared/Shared.Messaging/Events/ProductPriceChangedIntegrationEvent.cs`
- **RabbitMQ broker**

### Other components

- **API user**

## Connections

- API user → API host: sends requests (evidence: `README.md`)
- API host → Product features: registers module (evidence: `src/Bootstrapper/Api/Program.cs`)
- API host → Basket features: registers module (evidence: `src/Bootstrapper/Api/Program.cs`)
- API host → Order features: registers module (evidence: `src/Bootstrapper/Api/Program.cs`)
- Add basket item → Basket repository: loads and saves (evidence: `src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs`)
- Add basket item → Product features: queries product (evidence: `src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs`)
- Add basket item → Shopping cart: adds item (evidence: `src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs`)
- Cached repository → Basket repository: decorates (evidence: `src/Modules/Basket/Basket/Data/Repository/CachedBasketRepository.cs`)
- Basket checkout → Basket database: reads and writes (evidence: `src/Modules/Basket/Basket/Basket/Features/CheckoutBasket/CheckoutBasketHandler.cs`)
- Basket checkout → Checkout event: creates message (evidence: `src/Modules/Basket/Basket/Basket/Features/CheckoutBasket/CheckoutBasketHandler.cs`)
- Basket checkout → Outbox processor: records message (evidence: `src/Modules/Basket/Basket/Basket/Features/CheckoutBasket/CheckoutBasketHandler.cs`)
- Outbox processor → RabbitMQ broker: publishes messages
- RabbitMQ broker → Checkout consumer: delivers event (evidence: `README.md`)
- Checkout consumer → Create order: dispatches command (evidence: `src/Modules/Ordering/Ordering/Orders/EventHandlers/BasketCheckoutIntegrationEventHandler.cs`)
- Create order → Ordering database: saves order (evidence: `src/Modules/Ordering/Ordering/Orders/Features/CreateOrder/CreateOrderHandler.cs`)
- Create order → Order aggregate: creates aggregate (evidence: `src/Modules/Ordering/Ordering/Orders/Features/CreateOrder/CreateOrderHandler.cs`)
- Product features → Catalog database: queries and updates (evidence: `src/Modules/Catalog/Catalog/Products/Features/GetProducts/GetProductsHandler.cs`)
- Product features → Product aggregate: creates and updates (evidence: `src/Modules/Catalog/Catalog/Products/Features/CreateProduct/CreateProductHandler.cs`)
- Price change event → Price update handler: updates basket prices (evidence: `README.md`)
- Price update handler → Basket database: updates prices
- Product features → Price change event: publishes price change (evidence: `README.md`)
- CQRS contracts → Add basket item: defines command pattern (evidence: `src/Modules/Basket/Basket/Basket/Features/AddItemIntoBasket/AddItemIntoBasketHandler.cs`)
