# demi-ayman/bmb-ordering-system architecture

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

- Interactive diagram: https://gitdiagram.com/demi-ayman/bmb-ordering-system
- Repository: https://github.com/demi-ayman/bmb-ordering-system

## Overview

BMB Ordering is an ASP.NET Core ordering system: customers register or log in, then create, view, or soft-delete their orders; repeated qualifying deletions trigger a temporary ordering ban. Administrators can review customers and orders, including customer-specific order history. The README also documents a same-host browser client and consistent Problem Details errors. Edges are limited to relationships shown in the README or source-index references; unsampled controller, admin, and infrastructure internals are represented at their exact enclosing directories.

Main entry points: [`src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs`](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs) (Delete and Ban), [`src/BmbOrdering.Api/Program.cs`](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Program.cs) (API Host), [`src/BmbOrdering.Application/Abstractions/Persistence`](https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Abstractions/Persistence) (Persistence Contracts), [`src/BmbOrdering.Application/Authentication`](https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Authentication) (Register and Login)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and Client"]
  node_api_host["API Host<br/>[Program.cs]"]
  node_auth_api["Authentication API"]
  node_orders_api["Orders API"]
  node_admin_api["Admin API"]
  node_web_client["Web Client<br/>[app.js]"]
  node_error_middleware["Error Handling"]
end

subgraph group_application["Application Use Cases"]
  node_auth_cases["Register and Login<br/>[Authentication]"]
  node_create_order["Create Order"]
  node_read_orders["Order Queries<br/>[Orders]"]
  node_delete_order["Delete and Ban"]
  node_admin_queries["Admin Queries<br/>[Customers]"]
  node_persistence_contracts["Persistence Contracts<br/>[Persistence]"]
end

subgraph group_domain["Ordering Domain"]
  node_customer_entity["Customer Rules<br/>[Customer.cs]"]
  node_order_entity["Order Rules<br/>[Order.cs]"]
  node_deletion_event["Deletion Audit Event"]
end

subgraph group_infrastructure["Infrastructure"]
  node_db_context[("Ordering Database")]
  node_repositories["EF Repositories<br/>[Repositories]"]
  node_transaction["Serializable Transaction"]
  node_jwt["JWT Tokens"]
  node_roles["Role Provider"]
end

node_customer(("Customer"))
node_browser(("Browser User"))

node_customer -->|"uses"| node_web_client
node_web_client -.->|"calls"| node_api_host
node_browser -->|"requests"| node_api_host
node_api_host -->|"hosts"| node_auth_api
node_api_host -->|"hosts"| node_orders_api
node_api_host -->|"hosts"| node_admin_api
node_auth_api -->|"dispatches"| node_auth_cases
node_orders_api -->|"dispatches"| node_create_order
node_orders_api -->|"dispatches"| node_read_orders
node_orders_api -->|"dispatches"| node_delete_order
node_admin_api -->|"dispatches"| node_admin_queries
node_auth_cases -->|"uses"| node_persistence_contracts
node_auth_cases -->|"generates token"| node_jwt
node_auth_cases -->|"gets roles"| node_roles
node_auth_cases -->|"registers"| node_customer_entity
node_create_order -->|"reads and saves"| node_persistence_contracts
node_create_order -->|"checks ban"| node_customer_entity
node_create_order -->|"creates"| node_order_entity
node_read_orders -->|"queries"| node_persistence_contracts
node_delete_order -->|"reads and saves"| node_persistence_contracts
node_delete_order -->|"runs within"| node_transaction
node_delete_order -->|"soft deletes"| node_order_entity
node_delete_order -->|"records"| node_deletion_event
node_delete_order -->|"applies ban"| node_customer_entity
node_admin_queries -->|"queries"| node_persistence_contracts
node_repositories -->|"implements"| node_persistence_contracts
node_repositories -->|"queries"| node_db_context
node_transaction -->|"controls transaction"| node_db_context
node_db_context -->|"persists"| node_customer_entity
node_db_context -->|"persists"| node_order_entity
node_db_context -->|"persists"| node_deletion_event
node_api_host -.->|"configures"| node_error_middleware

click node_api_host "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Program.cs"
click node_auth_api "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Controllers/AuthenticationController.cs"
click node_orders_api "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Controllers/OrdersController.cs"
click node_admin_api "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Controllers/AdminCustomersController.cs"
click node_web_client "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/wwwroot/js/app.js"
click node_error_middleware "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Middleware/ExceptionHandlingMiddleware.cs"
click node_auth_cases "https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Authentication"
click node_create_order "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Application/Orders/Create/CreateOrderHandler.cs"
click node_read_orders "https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Orders"
click node_delete_order "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs"
click node_admin_queries "https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Customers"
click node_persistence_contracts "https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Abstractions/Persistence"
click node_customer_entity "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Domain/Customers/Customer.cs"
click node_order_entity "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Domain/Orders/Order.cs"
click node_deletion_event "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Domain/Orders/OrderDeletionEvent.cs"
click node_db_context "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Infrastructure/Persistence/OrderingDbContext.cs"
click node_repositories "https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Infrastructure/Persistence/Repositories"
click node_transaction "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Infrastructure/Persistence/TransactionManager.cs"
click node_jwt "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Infrastructure/Authentication/JwtTokenGenerator.cs"
click node_roles "https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Infrastructure/Authorization/ConfigurationUserRoleProvider.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_api_host,node_auth_api,node_orders_api,node_admin_api,node_web_client,node_error_middleware,node_browser toneBlue
class node_auth_cases,node_create_order,node_read_orders,node_delete_order,node_admin_queries,node_persistence_contracts toneAmber
class node_customer_entity,node_order_entity,node_deletion_event toneMint
class node_db_context,node_repositories,node_transaction,node_jwt,node_roles toneRose
class node_customer toneIndigo
```

## Components

### API and Client

- [API Host](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Program.cs): `src/BmbOrdering.Api/Program.cs`
- [Authentication API](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Controllers/AuthenticationController.cs): `src/BmbOrdering.Api/Controllers/AuthenticationController.cs`
- [Orders API](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Controllers/OrdersController.cs): `src/BmbOrdering.Api/Controllers/OrdersController.cs`
- [Admin API](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Controllers/AdminCustomersController.cs): `src/BmbOrdering.Api/Controllers/AdminCustomersController.cs`
- [Web Client](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/wwwroot/js/app.js): `src/BmbOrdering.Api/wwwroot/js/app.js`
- [Error Handling](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Api/Middleware/ExceptionHandlingMiddleware.cs): `src/BmbOrdering.Api/Middleware/ExceptionHandlingMiddleware.cs`

### Application Use Cases

- [Register and Login](https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Authentication): `src/BmbOrdering.Application/Authentication`
- [Create Order](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Application/Orders/Create/CreateOrderHandler.cs): `src/BmbOrdering.Application/Orders/Create/CreateOrderHandler.cs`
- [Order Queries](https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Orders): `src/BmbOrdering.Application/Orders`
- [Delete and Ban](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs): `src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs`
- [Admin Queries](https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Customers): `src/BmbOrdering.Application/Customers`
- [Persistence Contracts](https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Application/Abstractions/Persistence): `src/BmbOrdering.Application/Abstractions/Persistence`

### Ordering Domain

- [Customer Rules](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Domain/Customers/Customer.cs): `src/BmbOrdering.Domain/Customers/Customer.cs`
- [Order Rules](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Domain/Orders/Order.cs): `src/BmbOrdering.Domain/Orders/Order.cs`
- [Deletion Audit Event](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Domain/Orders/OrderDeletionEvent.cs): `src/BmbOrdering.Domain/Orders/OrderDeletionEvent.cs`

### Infrastructure

- [Ordering Database](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Infrastructure/Persistence/OrderingDbContext.cs): `src/BmbOrdering.Infrastructure/Persistence/OrderingDbContext.cs`
- [EF Repositories](https://github.com/demi-ayman/bmb-ordering-system/tree/main/src/BmbOrdering.Infrastructure/Persistence/Repositories): `src/BmbOrdering.Infrastructure/Persistence/Repositories`
- [Serializable Transaction](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Infrastructure/Persistence/TransactionManager.cs): `src/BmbOrdering.Infrastructure/Persistence/TransactionManager.cs`
- [JWT Tokens](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Infrastructure/Authentication/JwtTokenGenerator.cs): `src/BmbOrdering.Infrastructure/Authentication/JwtTokenGenerator.cs`
- [Role Provider](https://github.com/demi-ayman/bmb-ordering-system/blob/main/src/BmbOrdering.Infrastructure/Authorization/ConfigurationUserRoleProvider.cs): `src/BmbOrdering.Infrastructure/Authorization/ConfigurationUserRoleProvider.cs`

### Other components

- **Customer**
- **Browser User**

## Connections

- Customer → Web Client: uses (evidence: `README.md`)
- Web Client → API Host: calls
- Browser User → API Host: requests (evidence: `README.md`)
- API Host → Authentication API: hosts (evidence: `src/BmbOrdering.Api/Program.cs`)
- API Host → Orders API: hosts (evidence: `src/BmbOrdering.Api/Program.cs`)
- API Host → Admin API: hosts (evidence: `src/BmbOrdering.Api/Program.cs`)
- Authentication API → Register and Login: dispatches (evidence: `src/BmbOrdering.Api/Controllers/AuthenticationController.cs`)
- Orders API → Create Order: dispatches (evidence: `src/BmbOrdering.Api/Controllers/OrdersController.cs`)
- Orders API → Order Queries: dispatches (evidence: `src/BmbOrdering.Api/Controllers/OrdersController.cs`)
- Orders API → Delete and Ban: dispatches (evidence: `src/BmbOrdering.Api/Controllers/OrdersController.cs`)
- Admin API → Admin Queries: dispatches (evidence: `src/BmbOrdering.Api/Controllers/AdminCustomersController.cs`)
- Register and Login → Persistence Contracts: uses (evidence: `src/BmbOrdering.Application/Authentication/Register/RegisterCustomerHandler.cs`)
- Register and Login → JWT Tokens: generates token (evidence: `src/BmbOrdering.Application/Authentication/Login/LoginCustomerHandler.cs`)
- Register and Login → Role Provider: gets roles (evidence: `src/BmbOrdering.Application/Authentication/Login/LoginCustomerHandler.cs`)
- Register and Login → Customer Rules: registers (evidence: `src/BmbOrdering.Application/Authentication/Register/RegisterCustomerHandler.cs`)
- Create Order → Persistence Contracts: reads and saves (evidence: `src/BmbOrdering.Application/Orders/Create/CreateOrderHandler.cs`)
- Create Order → Customer Rules: checks ban (evidence: `src/BmbOrdering.Application/Orders/Create/CreateOrderHandler.cs`)
- Create Order → Order Rules: creates (evidence: `src/BmbOrdering.Application/Orders/Create/CreateOrderHandler.cs`)
- Order Queries → Persistence Contracts: queries (evidence: `src/BmbOrdering.Application/Orders/GetById/GetOrderByIdHandler.cs`)
- Delete and Ban → Persistence Contracts: reads and saves (evidence: `src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs`)
- Delete and Ban → Serializable Transaction: runs within (evidence: `src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs`)
- Delete and Ban → Order Rules: soft deletes (evidence: `src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs`)
- Delete and Ban → Deletion Audit Event: records (evidence: `src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs`)
- Delete and Ban → Customer Rules: applies ban (evidence: `src/BmbOrdering.Application/Orders/Delete/DeleteOrderHandler.cs`)
- Admin Queries → Persistence Contracts: queries (evidence: `src/BmbOrdering.Application/Customers/GetOrders/GetCustomerOrdersForAdminHandler.cs`)
- EF Repositories → Persistence Contracts: implements (evidence: `src/BmbOrdering.Infrastructure/Persistence/Repositories/CustomerRepository.cs`)
- EF Repositories → Ordering Database: queries (evidence: `src/BmbOrdering.Infrastructure/Persistence/Repositories/CustomerRepository.cs`)
- Serializable Transaction → Ordering Database: controls transaction (evidence: `src/BmbOrdering.Infrastructure/Persistence/TransactionManager.cs`)
- Ordering Database → Customer Rules: persists (evidence: `src/BmbOrdering.Infrastructure/Persistence/OrderingDbContext.cs`)
- Ordering Database → Order Rules: persists (evidence: `src/BmbOrdering.Infrastructure/Persistence/OrderingDbContext.cs`)
- Ordering Database → Deletion Audit Event: persists (evidence: `src/BmbOrdering.Infrastructure/Persistence/OrderingDbContext.cs`)
- API Host → Error Handling: configures (evidence: `src/BmbOrdering.Api/Program.cs`)
