Initial commit with inital CMS
This commit is contained in:
+30
@@ -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`.
|
||||
+47
@@ -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.
|
||||
+63
@@ -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
|
||||
}
|
||||
}
|
||||
```
|
||||
+31
@@ -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.
|
||||
+23
@@ -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).
|
||||
Reference in New Issue
Block a user