How alex289/cleanarchitecture works
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: Services Application services · Repositories Data repositories · Program.cs HTTP API · Users User commands
Components 24
API presentation
- HTTP API
CleanArchitecture.Api/Program.cs - User endpoints
CleanArchitecture.Api/Controllers/UserController.cs - Tenant endpoints
CleanArchitecture.Api/Controllers/TenantController.cs
Application use cases
- gRPC endpoints
CleanArchitecture.Application/gRPC - Application services
CleanArchitecture.Application/Services - User queries
CleanArchitecture.Application/Queries/Users - Tenant queries
CleanArchitecture.Application/Queries/Tenants
Domain model
- User commands
CleanArchitecture.Domain/Commands/Users - Tenant commands
CleanArchitecture.Domain/Commands/Tenants - User and tenant
CleanArchitecture.Domain/Entities - Domain notifications
CleanArchitecture.Domain/Notifications - Domain event handlers
CleanArchitecture.Domain/EventHandler - Message consumers
CleanArchitecture.Domain/Consumers
Infrastructure
- Data repositories
CleanArchitecture.Infrastructure/Repositories - Unit of work
CleanArchitecture.Infrastructure/UnitOfWork.cs - Application database
CleanArchitecture.Infrastructure/Database/ApplicationDbContext.cs - Event store
CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs - Notification store
CleanArchitecture.Infrastructure/Database/DomainNotificationStoreDbContext.cs
Service integrations
- gRPC contracts
CleanArchitecture.Proto
Other components
- API client
- gRPC client
- SQL Server
- RabbitMQ
- Redis cache
Connections 34
- 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