# samuelcmbah/sportstore architecture

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

- Interactive diagram: https://gitdiagram.com/samuelcmbah/sportstore
- Repository: https://github.com/samuelcmbah/sportstore

## Overview

SportStore is an ASP.NET Core e-commerce application. The primary customer workflow is product discovery, cart management, checkout and payment, followed by order-status updates and confirmation. Separate branches cover account security, administration, inventory, product images and email. The README documents several integrations whose implementations were not sampled; those capabilities are represented without asserting unverified internal wiring. Edges reflect sampled controller calls and documented interactions.

Main entry points: [`SportStore/Controllers/OrderController.cs`](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/OrderController.cs) (Checkout), [`SportStore/Controllers/CartController.cs`](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/CartController.cs) (Cart Controller), [`SportStore/Services/EFOrderRepository.cs`](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/EFOrderRepository.cs) (Order Repository), [`SportStore/Services/CartService.cs`](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/CartService.cs) (Persistent Cart)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Storefront"]
  node_home["Product Browsing<br/>[HomeController.cs]"]
  node_catalog["Product Services<br/>[ProductService.cs]"]
  node_store_repo["Store Repository"]
  node_poller["Status Poller"]
  node_store_db[("Store Database<br/>[StoreDbContext.cs]")]
end

subgraph group_commerce["Cart and Orders"]
  node_cart_controller["Cart Controller<br/>[CartController.cs]"]
  node_cart_domain["Cart Logic"]
  node_cart_service["Persistent Cart<br/>[CartService.cs]"]
  node_session_cart["Session Cart<br/>[SessionCart.cs]"]
  node_order_controller["Checkout<br/>[OrderController.cs]"]
  node_order_domain["Order Logic"]
  node_inventory["Inventory"]
  node_order_repo["Order Repository"]
  node_notification_api["Payment Webhook"]
  node_orders_api["Order Status API"]
end

subgraph group_identity["Accounts"]
  node_account_controller["Account Controller"]
  node_account_service["Account Service<br/>[AccountService.cs]"]
  node_identity_db[("Identity Store")]
end

subgraph group_operations["Administration"]
  node_admin_products["Product Admin"]
  node_admin_categories["Category Admin"]
  node_admin_orders["Order Admin"]
end

subgraph group_integrations["Integrations"]
  node_payment["Payment Service<br/>[PaymentService.cs]"]
  node_gateway{{"PayBridge"}}
  node_cloudinary_service["Image Service"]
  node_cloudinary{{"Cloudinary"}}
  node_notifications["Order Notifications"]
  node_email_service["Email Service<br/>[EmailService.cs]"]
  node_resend{{"Resend"}}
end

node_customer(("Customer"))

node_customer -->|"browses"| node_home
node_home -->|"queries products"| node_store_repo
node_store_repo -->|"reads"| node_store_db
node_customer -->|"updates cart"| node_cart_controller
node_cart_controller -->|"looks up product"| node_store_repo
node_cart_controller -->|"changes cart"| node_cart_domain
node_cart_controller -->|"loads or saves"| node_cart_service
node_cart_controller -->|"loads or saves"| node_session_cart
node_cart_service -->|"persists"| node_store_db
node_customer -->|"checks out"| node_order_controller
node_order_controller -->|"loads cart"| node_cart_service
node_order_controller -->|"loads cart"| node_session_cart
node_order_controller -->|"totals cart"| node_cart_domain
node_order_controller -->|"validates stock"| node_inventory
node_order_controller -->|"creates order"| node_order_domain
node_order_controller -->|"initializes payment"| node_payment
node_order_controller -->|"creates order"| node_order_repo
node_payment -.->|"requests payment"| node_gateway
node_gateway -.->|"sends notification"| node_notification_api
node_notification_api -->|"verifies payment"| node_payment
node_notification_api -->|"updates order"| node_order_repo
node_order_repo -->|"persists"| node_store_db
node_customer -->|"checks status"| node_poller
node_poller -->|"requests status"| node_orders_api
node_orders_api -->|"reads order"| node_order_repo
node_customer -->|"manages account"| node_account_controller
node_account_controller -->|"handles identity"| node_account_service
node_account_service -->|"uses identity store"| node_identity_db
node_account_service -->|"merges cart"| node_cart_service
node_admin_products -->|"manages products"| node_catalog
node_admin_products -->|"manages images"| node_cloudinary_service
node_cloudinary_service -.->|"uploads or deletes"| node_cloudinary
node_admin_categories -->|"manages categories"| node_store_db
node_admin_orders -->|"manages orders"| node_order_repo
node_notifications -->|"sends messages"| node_email_service
node_email_service -.->|"delivers email"| node_resend

click node_home "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/HomeController.cs"
click node_catalog "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/ProductService.cs"
click node_store_repo "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/EFStoreRepository.cs"
click node_cart_controller "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/CartController.cs"
click node_cart_domain "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/CartDomainService.cs"
click node_cart_service "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/CartService.cs"
click node_session_cart "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Utils/SessionCart.cs"
click node_order_controller "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/OrderController.cs"
click node_order_domain "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/OrderDomainService.cs"
click node_inventory "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/InventoryService.cs"
click node_order_repo "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/EFOrderRepository.cs"
click node_payment "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/PaymentService.cs"
click node_notification_api "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/PaymentNotificationAPIController.cs"
click node_orders_api "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/OrdersApiController.cs"
click node_poller "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/wwwroot/js/order-status-poller.js"
click node_account_controller "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/AccountController.cs"
click node_account_service "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/AccountService.cs"
click node_identity_db "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Data/AppIdentityDbContext.cs"
click node_admin_products "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Areas/Admin/Controllers/ProductsController.cs"
click node_admin_categories "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Areas/Admin/Controllers/CategoryController.cs"
click node_admin_orders "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Areas/Admin/Controllers/OrdersController.cs"
click node_cloudinary_service "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/CloudinaryService.cs"
click node_notifications "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/OrderNotificationService.cs"
click node_email_service "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/EmailService.cs"
click node_store_db "https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Data/StoreDbContext.cs"

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_home,node_catalog,node_store_repo,node_poller,node_store_db toneBlue
class node_cart_controller,node_cart_domain,node_cart_service,node_session_cart,node_order_controller,node_order_domain,node_inventory,node_order_repo,node_notification_api,node_orders_api toneAmber
class node_account_controller,node_account_service,node_identity_db toneMint
class node_admin_products,node_admin_categories,node_admin_orders toneRose
class node_payment,node_gateway,node_cloudinary_service,node_cloudinary,node_notifications,node_email_service,node_resend,node_customer toneIndigo
```

## Components

### Storefront

- [Product Browsing](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/HomeController.cs): `SportStore/Controllers/HomeController.cs`
- [Product Services](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/ProductService.cs): `SportStore/Services/ProductService.cs`
- [Store Repository](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/EFStoreRepository.cs): `SportStore/Services/EFStoreRepository.cs`
- [Status Poller](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/wwwroot/js/order-status-poller.js): `SportStore/wwwroot/js/order-status-poller.js`
- [Store Database](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Data/StoreDbContext.cs): `SportStore/Data/StoreDbContext.cs`

### Cart and Orders

- [Cart Controller](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/CartController.cs): `SportStore/Controllers/CartController.cs`
- [Cart Logic](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/CartDomainService.cs): `SportStore/Services/CartDomainService.cs`
- [Persistent Cart](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/CartService.cs): `SportStore/Services/CartService.cs`
- [Session Cart](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Utils/SessionCart.cs): `SportStore/Utils/SessionCart.cs`
- [Checkout](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/OrderController.cs): `SportStore/Controllers/OrderController.cs`
- [Order Logic](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/OrderDomainService.cs): `SportStore/Services/OrderDomainService.cs`
- [Inventory](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/InventoryService.cs): `SportStore/Services/InventoryService.cs`
- [Order Repository](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/EFOrderRepository.cs): `SportStore/Services/EFOrderRepository.cs`
- [Payment Webhook](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/PaymentNotificationAPIController.cs): `SportStore/Controllers/PaymentNotificationAPIController.cs`
- [Order Status API](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/OrdersApiController.cs): `SportStore/Controllers/OrdersApiController.cs`

### Accounts

- [Account Controller](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Controllers/AccountController.cs): `SportStore/Controllers/AccountController.cs`
- [Account Service](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/AccountService.cs): `SportStore/Services/AccountService.cs`
- [Identity Store](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Data/AppIdentityDbContext.cs): `SportStore/Data/AppIdentityDbContext.cs`

### Administration

- [Product Admin](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Areas/Admin/Controllers/ProductsController.cs): `SportStore/Areas/Admin/Controllers/ProductsController.cs`
- [Category Admin](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Areas/Admin/Controllers/CategoryController.cs): `SportStore/Areas/Admin/Controllers/CategoryController.cs`
- [Order Admin](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Areas/Admin/Controllers/OrdersController.cs): `SportStore/Areas/Admin/Controllers/OrdersController.cs`

### Integrations

- [Payment Service](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/PaymentService.cs): `SportStore/Services/PaymentService.cs`
- **PayBridge**
- [Image Service](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/CloudinaryService.cs): `SportStore/Services/CloudinaryService.cs`
- **Cloudinary**
- [Order Notifications](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/OrderNotificationService.cs): `SportStore/Services/OrderNotificationService.cs`
- [Email Service](https://github.com/samuelcmbah/sportstore/blob/dev/SportStore/Services/EmailService.cs): `SportStore/Services/EmailService.cs`
- **Resend**

### Other components

- **Customer**

## Connections

- Customer → Product Browsing: browses
- Product Browsing → Store Repository: queries products
- Store Repository → Store Database: reads
- Customer → Cart Controller: updates cart
- Cart Controller → Store Repository: looks up product
- Cart Controller → Cart Logic: changes cart
- Cart Controller → Persistent Cart: loads or saves
- Cart Controller → Session Cart: loads or saves
- Persistent Cart → Store Database: persists
- Customer → Checkout: checks out
- Checkout → Persistent Cart: loads cart
- Checkout → Session Cart: loads cart
- Checkout → Cart Logic: totals cart
- Checkout → Inventory: validates stock
- Checkout → Order Logic: creates order
- Checkout → Payment Service: initializes payment
- Checkout → Order Repository: creates order
- Payment Service → PayBridge: requests payment
- PayBridge → Payment Webhook: sends notification
- Payment Webhook → Payment Service: verifies payment
- Payment Webhook → Order Repository: updates order
- Order Repository → Store Database: persists
- Customer → Status Poller: checks status
- Status Poller → Order Status API: requests status
- Order Status API → Order Repository: reads order
- Customer → Account Controller: manages account
- Account Controller → Account Service: handles identity
- Account Service → Identity Store: uses identity store
- Account Service → Persistent Cart: merges cart
- Product Admin → Product Services: manages products
- Product Admin → Image Service: manages images
- Image Service → Cloudinary: uploads or deletes
- Category Admin → Store Database: manages categories
- Order Admin → Order Repository: manages orders
- Order Notifications → Email Service: sends messages
- Email Service → Resend: delivers email
