5.1 KiB
5.1 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
SlpModularCms/
+-- src/
| +-- SlpModularCms.Api/ # API host
| | +-- Extensions/
| | | +-- ServiceCollectionExtensions.cs # DI setup (JWT, Identity, EF, Auth)
| | +-- Infrastructure/ # Global exception handler
| | +-- Properties/launchSettings.json
| | +-- Program.cs # App startup and module loading
| | +-- appsettings.json
| | +-- appsettings.local.json # Local dev overrides
| |
| +-- SlpModularCms.Core/ # Shared core
| | +-- Availability/
| | | +-- AvailabilityOptions.cs # Circuit breaker config
| | | +-- AvailabilityStatus.cs # Enum: Available, Maintenance, Unavailable
| | +-- Data/
| | | +-- ApplicationDbContext.cs # EF Core DbContext
| | +-- Exceptions/ # Custom exception types
| | +-- Identity/
| | | +-- Authorization/ # Policy handlers
| | | +-- Entities/
| | | | +-- ApplicationUser.cs # IdentityUser<Guid> + IsActive + CreatedAt
| | | | +-- ApplicationRole.cs # IdentityRole<Guid>
| | | | +-- RefreshToken.cs # Refresh token entity
| | | | +-- Invitation.cs # Invite entity with expiry
| | | | +-- GlobalAvailabilityState.cs # Persisted system status
| | | +-- Models/ # DTOs/request-response models
| | | +-- Services/
| | | +-- AuthService.cs # JWT generation + token validation
| | | +-- InvitationService.cs # Invite creation + completion
| | | +-- SetupService.cs # Initial owner creation
| | +-- Migrations/ # EF Core migrations
| | +-- Modules/
| | +-- IModule.cs # Module interface (Name, Version, RegisterServices, UseModule)
| | +-- ModuleInfo.cs # Module metadata record
| |
| +-- SlpModularCms.Modules.Identity/ # Identity feature module
| | +-- Controllers/
| | +-- AuthController.cs # /auth/* endpoints
| | +-- SetupController.cs # /setup/* endpoints
| | +-- UsersController.cs # /users/* endpoints
| |
| +-- SlpModularCms.Modules.Availability/ # Availability feature module
| | +-- Controllers/
| | | +-- AvailabilityController.cs # /availability/* endpoints
| | +-- Middleware/ # Availability check middleware
| | +-- Services/
| | +-- PersistentAvailabilityService.cs # Reads/writes status to DB + cache
| |
| +-- SlpModularCms.Core.Tests/ # Core unit tests
| +-- SlpModularCms.Modules.Availability.Tests/ # Availability unit tests
|
+-- aidlc-docs/ # AI-DLC workflow documentation
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