Files
slp-modular-cms/aidlc-docs/_shared/reverse-engineering/code-structure.md
T

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 — extends IdentityUser<Guid> with IsActive, CreatedAt, Naam
  • ApplicationRole — extends IdentityRole<Guid>
  • RefreshToken — linked to user; has Token, ExpiryDate, IsRevoked, IsActive
  • Invitation — linked to user (invitee); has Token, ExpiryDate, IsUsed, Role
  • GlobalAvailabilityState — singleton-ish entity storing Status, Message, LastUpdatedAt, UpdatedBy

Core Services

  • IAuthService / AuthServiceAuthenticateAsync, RefreshTokenAsync, RevokeTokenAsync
  • IInvitationService / InvitationServiceCreateInvitationAsync, CompleteInvitationAsync, ValidateInvitationAsync
  • ISetupService / SetupServiceIsSystemInitializedAsync, CreateInitialOwnerAsync
  • IAvailabilityService / PersistentAvailabilityServiceIsAvailableAsync, 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 IModule and is registered in the API host

Repository Pattern via EF Core

  • Location: ApplicationDbContext used 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