Initial commit with inital CMS

This commit is contained in:
2026-06-15 17:00:16 +02:00
commit 95d986790e
132 changed files with 7624 additions and 0 deletions
@@ -0,0 +1,30 @@
# Business Rules — Unit 04: API Shell & Integration
Dit document beschrijft de integratie-regels en de orkestratie van de modules.
## 1. Module Discovery (BR-SHELL-01)
- **Scanning**: De API Shell scant bij het opstarten naar alle geladen assemblies die voldoen aan het patroon `SlpModularCms.Modules.*`.
- **Interface**: Alleen klassen die `IModule` implementeren worden geregistreerd.
- **Validatie**: Indien een module niet voldoet aan de eisen (bijv. ontbrekende naam of versie), wordt dit gelogd als een fout en wordt de module niet geladen.
## 2. Dependency Injection & Pipeline (BR-SHELL-02)
- **Gecentraliseerde Registratie**: De `ModuleOrchestrator` roept `RegisterServices` aan op alle gevonden modules voordat de applicatie start.
- **Middleware Pipeline**: De `ModuleOrchestrator` roept `UseModule` aan om modules de kans te geven hun middleware te registreren in de HTTP pipeline.
- **Core First**: Core services (Identity, Logging) worden altijd geregistreerd vóórdat de modules aan de beurt zijn.
## 3. API Versioning & Routing (BR-SHELL-03)
- **Gecentraliseerde Prefix**: Alle API endpoints krijgen de prefix `/api/v1/`.
- **Afdwingen**: Dit wordt globaal geconfigureerd in de Shell zodat individuele modules hier geen rekening mee hoeven te houden in hun route attributen.
## 4. Swagger Documentatie (BR-SHELL-04)
- **Tagging**: De Shell groepeert endpoints automatisch per module op basis van de module naam die in de `IModule` interface is opgegeven.
- **Security**: Swagger wordt geconfigureerd om JWT Bearer tokens te ondersteunen voor het testen van beveiligde endpoints.
## 5. Cross-Module Communicatie (BR-SHELL-05)
- **Ontkoppeling**: Modules communiceren niet direct met elkaar via projectreferenties.
- **Interfaces**: Communicatie verloopt uitsluitend via interfaces die gedefinieerd zijn in `SlpModularCms.Core`.
@@ -0,0 +1,47 @@
# Business Logic Model — Unit 04: API Shell & Integration
Dit document beschrijft de startup flow en de orkestratie logica van de shell.
## 1. Startup Orkestratie Flow
```mermaid
sequenceDiagram
participant Program as Program.cs
participant Orc as ModuleOrchestrator
participant Core as Core Services
participant Mod as Modules (IModule)
Program->>Orc: DiscoverModules()
Orc-->>Program: List<IModule>
Program->>Core: RegisterCoreServices(Identity, DB, JWT)
loop Per Module
Program->>Mod: RegisterServices(IServiceCollection)
end
Program->>Program: Build App
Program->>Program: UseExceptionHandler()
loop Per Module
Program->>Mod: UseModule(IApplicationBuilder)
end
Program->>Program: UseAuthentication/Authorization()
Program->>Program: MapControllers()
Program->>Program: Run()
```
## 2. API Versioning Logic
De versioning wordt toegepast via een globale `RoutePrefix` of door gebruik te maken van de `Microsoft.AspNetCore.Mvc.Versioning` library.
- **Base Path**: `/api/v1`
- **Fallback**: Verzoeken zonder versie-indicator in het pad worden standaard naar v1 gerouteerd.
## 3. Dynamische Swagger Groepering
1. Swagger scan de controllers van alle geladen assemblies.
2. Voor elke controller wordt gekeken naar de assembly waarin deze is gedefinieerd.
3. Indien de assembly toebehoort aan een module (bijv. `SlpModularCms.Modules.Availability`), wordt de module naam als 'Tag' toegevoegd aan alle endpoints van die controller.
4. Swagger UI toont de endpoints gegroepeerd onder deze tags.
@@ -0,0 +1,63 @@
# Orchestration Design — Unit 04: API Shell & Integration
Dit document beschrijft de technische implementatie van de module orkestratie.
## 1. ModuleOrchestrator
De orchestrator is verantwoordelijk voor de lifecycle van modules.
- **Discovery**:
- Gebruikt Reflection om alle typen in geladen assemblies te scannen.
- Filtert op klassen die `IModule` implementeren en niet abstract zijn.
- **Error Handling (Soft Fail)**:
- Bij het laden van een module wordt de aanroep van `RegisterServices` en `UseModule` omgeven door een `try-catch` blok.
- Fouten worden gelogd als `Error` naar de `ILogger`.
- De orkestratie gaat door naar de volgende module om de algehele beschikbaarheid te maximaliseren.
## 2. Route Conventions
De `/api/v1/` prefix wordt afgedwongen via een custom `IApplicationModelConvention`:
```csharp
public class ApiPrefixConvention : IApplicationModelConvention
{
public void Apply(ApplicationModel application)
{
foreach (var controller in application.Controllers)
{
foreach (var selector in controller.Selectors)
{
// Voeg prefix toe aan bestaande route
var routePrefix = new AttributeRouteModel(new RouteAttribute("api/v1"));
selector.AttributeRouteModel = selector.AttributeRouteModel != null
? AttributeRouteModel.CombineAttributeRouteModels(routePrefix, selector.AttributeRouteModel)
: routePrefix;
}
}
}
}
```
## 3. Swagger & Security Design
Swagger wordt geconfigureerd in `Program.cs`:
- **Groepering**: Gebruik van `DocInclusionPredicate` om controllers te taggen op basis van hun assembly prefix (bijv. `Availability`).
- **JWT Support**:
- `AddSecurityDefinition("Bearer", ...)`
- `AddSecurityRequirement(...)`
- **Pad**: Beschikbaar op `/swagger` via `app.UseSwaggerUI(c => c.RoutePrefix = "swagger")`.
## 4. CORS Global Configuration
De Shell leest de `CorsSettings` uit `appsettings.json` en configureert een globale policy:
```json
{
"CorsSettings": {
"AllowedOrigins": ["https://portal.slp-modular.local"],
"AllowAnyHeader": true,
"AllowAnyMethod": true
}
}
```
@@ -0,0 +1,31 @@
# NFR Requirements — Unit 04: API Shell & Integration
Dit document specificeert de non-functionele vereisten voor de API Shell.
## 1. Performance (SHELL-PERF)
- **SHELL-PERF-01: Startup Tijd**:
- Hoewel de startup tijd niet kritisch is (> 5 sec toegestaan), moet de `ModuleOrchestrator` efficiënt scannen om onnodige vertragingen te voorkomen.
- **SHELL-PERF-02: Pipeline Efficiency**:
- De orkestratie van middleware mag geen significante overhead toevoegen aan de verwerking van individuele requests.
## 2. Beveiliging (SHELL-SEC)
- **SHELL-SEC-01: CORS**:
- CORS moet worden geconfigureerd via `appsettings.json`. De default instelling voor productie moet strikt zijn (geen wildcards).
- **SHELL-SEC-02: HTTPS**:
- De API Shell moet HTTPS afdwingen via `app.UseHttpsRedirection()`.
- **SHELL-SEC-03: JWT Configuratie**:
- De Shell is verantwoordelijk voor het correct configureren van de `JwtBearerAuthentication` met de keys en settings die in Unit 02 zijn gedefinieerd.
## 3. Bruikbaarheid (SHELL-USAB)
- **SHELL-USAB-01: Swagger**:
- Swagger UI moet volledig interactief zijn, inclusief ondersteuning voor JWT Bearer authenticatie (Authorize knop).
- Alle endpoints moeten duidelijk gedocumenteerd zijn met hun verwachte input en output modellen.
## 4. Onderhoudbaarheid (SHELL-MAINT)
- **SHELL-MAINT-01: Logging Aggregatie**:
- Alle logs van modules moeten worden geaggregeerd naar de centrale logging provider van de Shell.
- Contextuele informatie (zoals de module naam) moet aan de logs worden toegevoegd voor betere traceerbaarheid.
@@ -0,0 +1,23 @@
# Tech Stack Decisions — Unit 04: API Shell & Integration
Dit document beschrijft de definitieve technische keuzes voor Unit 04.
## 1. API Framework & Routing
- **Host**: ASP.NET Core 10.
- **Versioning**: `Asp.Versioning.Mvc` (v1 in path).
- **CORS**: `Microsoft.AspNetCore.Cors`.
## 2. API Documentatie
- **Swagger Provider**: `Swashbuckle.AspNetCore`.
- **UI**: `SwaggerUI`.
- **Beveiliging**: Geconfigureerd met `OpenApiSecurityScheme` (Type: `ApiKey`, In: `Header`, Name: `Authorization`, Scheme: `Bearer`).
## 3. Module Discovery
- **Scanning Mechanism**: Reflection via `AppDomain.CurrentDomain.GetAssemblies()` gecombineerd met `Assembly.Load` voor DLL's die nog niet geladen zijn maar wel de prefix hebben.
## 4. Configuratie Beheer
- **Options Pattern**: Gebruik van `IOptions` voor alle shell-specifieke instellingen (CORS, Versioning, Swagger).