# alex289/cleanarchitecture architecture

> Architecture diagram of the GitHub repository alex289/cleanarchitecture, 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/alex289/cleanarchitecture
- Repository: https://github.com/alex289/cleanarchitecture

## Overview

This is a Clean Architecture .NET API for managing tenants and users. The principal workflow is an authenticated HTTP request through a controller and application service to a query or command, with results returned as API responses; user login is explicitly anonymous. The repository also exposes tenant/user gRPC endpoints and processes domain-event messages. Query-handler and controller behavior is supported by sampled source; several command, service, persistence, and event-processing links are included as documented product layers, but their implementation was not sampled.

Main entry points: [`CleanArchitecture.Application/Services`](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/Services) (Application services), [`CleanArchitecture.Infrastructure/Repositories`](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Infrastructure/Repositories) (Data repositories), [`CleanArchitecture.Api/Program.cs`](https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Api/Program.cs) (HTTP API), [`CleanArchitecture.Domain/Commands/Users`](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Commands/Users) (User commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["API presentation"]
  node_api["HTTP API<br/>[Program.cs]"]
  node_user_controller["User endpoints<br/>[UserController.cs]"]
  node_tenant_controller["Tenant endpoints"]
end

subgraph group_application["Application use cases"]
  node_grpc_handlers["gRPC endpoints<br/>[gRPC]"]
  node_app_services["Application services<br/>[Services]"]
  node_user_queries["User queries<br/>[Users]"]
  node_tenant_queries["Tenant queries<br/>[Tenants]"]
end

subgraph group_domain["Domain model"]
  node_user_commands["User commands<br/>[Users]"]
  node_tenant_commands["Tenant commands<br/>[Tenants]"]
  node_entities["User and tenant<br/>[Entities]"]
  node_notifications["Domain notifications<br/>[Notifications]"]
  node_event_handlers["Domain event handlers<br/>[EventHandler]"]
  node_consumers["Message consumers<br/>[Consumers]"]
end

subgraph group_infrastructure["Infrastructure"]
  node_repositories["Data repositories<br/>[Repositories]"]
  node_unit_of_work["Unit of work<br/>[UnitOfWork.cs]"]
  node_app_db[("Application database")]
  node_event_store[("Event store<br/>[EventStore.cs]")]
  node_notification_store[("Notification store")]
end

subgraph group_integrations["Service integrations"]
  node_grpc_contracts["gRPC contracts"]
end

node_client(("API client"))
node_grpc_client(("gRPC client"))
node_sql_server[("SQL Server")]
node_rabbitmq["RabbitMQ"]
node_redis[("Redis cache")]

node_client -->|"sends HTTP"| node_user_controller
node_client -->|"sends HTTP"| node_tenant_controller
node_api -->|"maps routes"| node_user_controller
node_api -->|"maps routes"| node_tenant_controller
node_user_controller -->|"calls user service"| node_app_services
node_tenant_controller -->|"calls tenant service"| node_app_services
node_app_services -->|"dispatches queries"| node_user_queries
node_app_services -->|"dispatches queries"| node_tenant_queries
node_app_services -->|"dispatches commands"| node_user_commands
node_app_services -->|"dispatches commands"| node_tenant_commands
node_user_queries -->|"reads users"| node_repositories
node_tenant_queries -->|"reads tenants"| node_repositories
node_user_commands -->|"uses repositories"| node_repositories
node_tenant_commands -->|"uses repositories"| node_repositories
node_user_commands -->|"commits changes"| node_unit_of_work
node_tenant_commands -->|"commits changes"| node_unit_of_work
node_repositories -->|"queries data"| node_app_db
node_unit_of_work -->|"saves changes"| node_app_db
node_app_db -->|"persists records"| node_sql_server
node_user_commands -->|"changes users"| node_entities
node_tenant_commands -->|"changes tenants"| node_entities
node_user_queries -->|"raises not-found"| node_notifications
node_tenant_queries -->|"raises not-found"| node_notifications
node_api -->|"maps gRPC"| node_grpc_handlers
node_grpc_client -->|"calls RPC"| node_grpc_handlers
node_grpc_handlers -->|"reads records"| node_repositories
node_grpc_contracts -->|"defines RPC types"| node_grpc_handlers
node_api -->|"registers consumers"| node_consumers
node_consumers -->|"dispatches events"| node_event_handlers
node_event_handlers -->|"handles domain events"| node_entities
node_event_handlers -->|"stores events"| node_event_store
node_notifications -->|"stores notifications"| node_notification_store
node_consumers -->|"receives messages"| node_rabbitmq
node_api -.->|"configures cache"| node_redis

click node_api "https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Api/Program.cs"
click node_user_controller "https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Api/Controllers/UserController.cs"
click node_tenant_controller "https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Api/Controllers/TenantController.cs"
click node_grpc_handlers "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/gRPC"
click node_app_services "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/Services"
click node_user_queries "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/Queries/Users"
click node_tenant_queries "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/Queries/Tenants"
click node_user_commands "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Commands/Users"
click node_tenant_commands "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Commands/Tenants"
click node_entities "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Entities"
click node_notifications "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Notifications"
click node_event_handlers "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/EventHandler"
click node_consumers "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Consumers"
click node_repositories "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Infrastructure/Repositories"
click node_unit_of_work "https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Infrastructure/UnitOfWork.cs"
click node_app_db "https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Infrastructure/Database/ApplicationDbContext.cs"
click node_event_store "https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs"
click node_notification_store "https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Infrastructure/Database/DomainNotificationStoreDbContext.cs"
click node_grpc_contracts "https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Proto"

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_user_controller,node_tenant_controller,node_client,node_grpc_client toneBlue
class node_grpc_handlers,node_app_services,node_user_queries,node_tenant_queries,node_sql_server,node_redis toneAmber
class node_user_commands,node_tenant_commands,node_entities,node_notifications,node_event_handlers,node_consumers toneMint
class node_repositories,node_unit_of_work,node_app_db,node_event_store,node_notification_store toneRose
class node_grpc_contracts,node_rabbitmq toneIndigo
```

## Components

### API presentation

- [HTTP API](https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Api/Program.cs): `CleanArchitecture.Api/Program.cs`
- [User endpoints](https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Api/Controllers/UserController.cs): `CleanArchitecture.Api/Controllers/UserController.cs`
- [Tenant endpoints](https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Api/Controllers/TenantController.cs): `CleanArchitecture.Api/Controllers/TenantController.cs`

### Application use cases

- [gRPC endpoints](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/gRPC): `CleanArchitecture.Application/gRPC`
- [Application services](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/Services): `CleanArchitecture.Application/Services`
- [User queries](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/Queries/Users): `CleanArchitecture.Application/Queries/Users`
- [Tenant queries](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Application/Queries/Tenants): `CleanArchitecture.Application/Queries/Tenants`

### Domain model

- [User commands](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Commands/Users): `CleanArchitecture.Domain/Commands/Users`
- [Tenant commands](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Commands/Tenants): `CleanArchitecture.Domain/Commands/Tenants`
- [User and tenant](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Entities): `CleanArchitecture.Domain/Entities`
- [Domain notifications](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Notifications): `CleanArchitecture.Domain/Notifications`
- [Domain event handlers](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/EventHandler): `CleanArchitecture.Domain/EventHandler`
- [Message consumers](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Domain/Consumers): `CleanArchitecture.Domain/Consumers`

### Infrastructure

- [Data repositories](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Infrastructure/Repositories): `CleanArchitecture.Infrastructure/Repositories`
- [Unit of work](https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Infrastructure/UnitOfWork.cs): `CleanArchitecture.Infrastructure/UnitOfWork.cs`
- [Application database](https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Infrastructure/Database/ApplicationDbContext.cs): `CleanArchitecture.Infrastructure/Database/ApplicationDbContext.cs`
- [Event store](https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs): `CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs`
- [Notification store](https://github.com/alex289/cleanarchitecture/blob/main/CleanArchitecture.Infrastructure/Database/DomainNotificationStoreDbContext.cs): `CleanArchitecture.Infrastructure/Database/DomainNotificationStoreDbContext.cs`

### Service integrations

- [gRPC contracts](https://github.com/alex289/cleanarchitecture/tree/main/CleanArchitecture.Proto): `CleanArchitecture.Proto`

### Other components

- **API client**
- **gRPC client**
- **SQL Server**
- **RabbitMQ**
- **Redis cache**

## Connections

- API client → User endpoints: sends HTTP
- API client → Tenant endpoints: sends HTTP
- HTTP API → User endpoints: maps routes
- HTTP API → Tenant endpoints: maps routes
- User endpoints → Application services: calls user service
- Tenant endpoints → Application services: calls tenant service
- Application services → User queries: dispatches queries
- Application services → Tenant queries: dispatches queries
- Application services → User commands: dispatches commands
- Application services → Tenant commands: dispatches commands
- User queries → Data repositories: reads users
- Tenant queries → Data repositories: reads tenants
- User commands → Data repositories: uses repositories
- Tenant commands → Data repositories: uses repositories
- User commands → Unit of work: commits changes
- Tenant commands → Unit of work: commits changes
- Data repositories → Application database: queries data
- Unit of work → Application database: saves changes
- Application database → SQL Server: persists records
- User commands → User and tenant: changes users
- Tenant commands → User and tenant: changes tenants
- User queries → Domain notifications: raises not-found
- Tenant queries → Domain notifications: raises not-found
- HTTP API → gRPC endpoints: maps gRPC
- gRPC client → gRPC endpoints: calls RPC
- gRPC endpoints → Data repositories: reads records
- gRPC contracts → gRPC endpoints: defines RPC types
- HTTP API → Message consumers: registers consumers
- Message consumers → Domain event handlers: dispatches events
- Domain event handlers → User and tenant: handles domain events
- Domain event handlers → Event store: stores events
- Domain notifications → Notification store: stores notifications
- Message consumers → RabbitMQ: receives messages
- HTTP API → Redis cache: configures cache
