4.8 KiB
4.8 KiB
Code Structure
Build System
- Type: .NET SDK (MSBuild / dotnet CLI)
- Configuration:
SlpModularCms.sln— solution file referencing all projects - Target Framework:
net10.0
Project Structure
graph TD
Root["SlpModularCms/"]
Src["src/"]
Api["SlpModularCms.Api\n(API host)"]
ApiExt["Extensions/\nServiceCollectionExtensions.cs"]
ApiInfra["Infrastructure/\nGlobal exception handler"]
ApiProg["Program.cs\nApp startup + module loading"]
Core["SlpModularCms.Core\n(Shared core)"]
CoreAvail["Availability/\nAvailabilityOptions.cs\nAvailabilityStatus.cs"]
CoreData["Data/\nApplicationDbContext.cs"]
CoreIdentity["Identity/\nEntities, Models, Services\nAuthorization/"]
CoreMigrations["Migrations/\nEF Core migrations"]
CoreModules["Modules/\nIModule.cs, ModuleInfo.cs"]
ModIdentity["SlpModularCms.Modules.Identity\n(Identity module)"]
ModIdentityCtrl["Controllers/\nAuthController\nSetupController\nUsersController"]
ModAvail["SlpModularCms.Modules.Availability\n(Availability module)"]
ModAvailCtrl["Controllers/\nAvailabilityController"]
ModAvailSvc["Services/\nPersistentAvailabilityService"]
Tests1["SlpModularCms.Core.Tests"]
Tests2["SlpModularCms.Modules.Availability.Tests"]
Docs["aidlc-docs/\nAI-DLC workflow documentation"]
Root --> Src
Root --> Docs
Src --> Api
Src --> Core
Src --> ModIdentity
Src --> ModAvail
Src --> Tests1
Src --> Tests2
Api --> ApiExt
Api --> ApiInfra
Api --> ApiProg
Core --> CoreAvail
Core --> CoreData
Core --> CoreIdentity
Core --> CoreMigrations
Core --> CoreModules
ModIdentity --> ModIdentityCtrl
ModAvail --> ModAvailCtrl
ModAvail --> ModAvailSvc
style Api fill:#4CAF50,stroke:#2E7D32,color:#fff
style ApiExt fill:#4CAF50,stroke:#2E7D32,color:#fff
style ApiInfra fill:#4CAF50,stroke:#2E7D32,color:#fff
style ApiProg fill:#4CAF50,stroke:#2E7D32,color:#fff
style Core fill:#FFC107,stroke:#F57F17,color:#000
style CoreAvail fill:#FFC107,stroke:#F57F17,color:#000
style CoreData fill:#FFC107,stroke:#F57F17,color:#000
style CoreIdentity fill:#FFC107,stroke:#F57F17,color:#000
style CoreMigrations fill:#FFC107,stroke:#F57F17,color:#000
style CoreModules fill:#FFC107,stroke:#F57F17,color:#000
style ModIdentity fill:#4CAF50,stroke:#2E7D32,color:#fff
style ModIdentityCtrl fill:#4CAF50,stroke:#2E7D32,color:#fff
style ModAvail fill:#4CAF50,stroke:#2E7D32,color:#fff
style ModAvailCtrl fill:#4CAF50,stroke:#2E7D32,color:#fff
style ModAvailSvc fill:#4CAF50,stroke:#2E7D32,color:#fff
style Tests1 fill:#9E9E9E,stroke:#424242,color:#fff
style Tests2 fill:#9E9E9E,stroke:#424242,color:#fff
style Docs fill:#CE93D8,stroke:#6A1B9A,color:#000
Key Classes/Modules
Core Domain Entities
ApplicationUser— extendsIdentityUser<Guid>withIsActive,CreatedAt,NaamApplicationRole— extendsIdentityRole<Guid>RefreshToken— linked to user; hasToken,ExpiryDate,IsRevoked,IsActiveInvitation— linked to user (invitee); hasToken,ExpiryDate,IsUsed,RoleGlobalAvailabilityState— singleton-ish entity storingStatus,Message,LastUpdatedAt,UpdatedBy
Core Services
IAuthService/AuthService—AuthenticateAsync,RefreshTokenAsync,RevokeTokenAsyncIInvitationService/InvitationService—CreateInvitationAsync,CompleteInvitationAsync,ValidateInvitationAsyncISetupService/SetupService—IsSystemInitializedAsync,CreateInitialOwnerAsyncIAvailabilityService/PersistentAvailabilityService—IsAvailableAsync,UpdateStatusAsync
Module System
IModule— interface:RegisterServices(IServiceCollection),UseModule(IApplicationBuilder)- Modules discovered at startup and invoked in sequence
Design Patterns
Module Pattern
- Location:
SlpModularCms.Core/Modules/,SlpModularCms.Api/Program.cs - Purpose: Allows features to be developed, tested, and deployed independently
- Implementation: Each module class implements
IModuleand is registered in the API host
Repository Pattern via EF Core
- Location:
ApplicationDbContextused directly in services - Purpose: Centralized persistence with Entity Framework
JWT with Refresh Token Rotation
- Location:
AuthService.cs,AuthController.cs - Purpose: Stateless auth with token refresh capability
Critical Dependencies
ASP.NET Core Identity
- Version: .NET 10 built-in
- Usage: User/Role management, password hashing
- Purpose: Provides authentication primitives
Entity Framework Core
- Version: .NET 10 built-in
- Usage: Data persistence with SQL Server provider
- Purpose: ORM for all domain entities