# SlpModularCms Een modulaire monolith CMS gebouwd met .NET 10. ## Projectstructuur - `src/SlpModularCms.Api`: De host applicatie en API shell. - `src/SlpModularCms.Core`: Kern functionaliteiten, data modellen en interfaces. - `src/SlpModularCms.Modules.*`: Onafhankelijke functionele modules. ## Development Setup ### Vereisten - .NET 10 SDK - Podman of Docker (voor SQL Server) ### 1. Database opstarten Start een SQL Server container met de volgende opdracht: ```powershell podman run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=MSSQL_s3cr3t_pw!" -p 1433:1433 --name sql-server -d mcr.microsoft.com/mssql/server:2022-latest ``` ### 2. Configuratie De applicatie maakt gebruik van een drie-bestanden patroon voor configuratie: - `appsettings.json`: Productie baseline. - `appsettings.Development.json`: Ontwikkelinstellingen. - `appsettings.local.json`: Lokale overrides (niet in Git). Zorg dat er een `src/SlpModularCms.Api/appsettings.local.json` aanwezig is met de juiste connection string: ```json { "ConnectionStrings": { "DefaultConnection": "Server=127.0.0.1,1433;User ID=sa;Password=MSSQL_s3cr3t_pw!;Database=SlpModularCms;TrustServerCertificate=True;MultipleActiveResultSets=true" } } ``` ### 3. Applicatie starten Voer de applicatie uit vanaf de root: ```powershell dotnet run --project src/SlpModularCms.Api ``` De API is daarna bereikbaar op `https://localhost:7221` (of de geconfigureerde poort). De OpenAPI documentatie (Scalar) is beschikbaar op `/scalar`. ## Initiële Setup (Bootstrapping) Wanneer de applicatie voor de eerste keer wordt gestart met een lege database, moet er een "Owner" (eigenaar) worden aangemaakt. Dit kan via de setup endpoints. ### 1. Status controleren Controleer of het systeem al geïnitialiseerd is: - **Endpoint**: `GET /api/v1/Setup/status` - **Response**: `{ "initialized": true/false }` ### 2. Eerste Owner aanmaken Dit endpoint is alleen bruikbaar als er nog geen Owner in de database staat. - **Endpoint**: `POST /api/v1/Setup/owner` - **Payload**: ```json { "email": "admin@example.com", "password": "JeWachtwoord123!" } ``` ## Database Migraties Alle database commando's moeten worden uitgevoerd vanaf de **root** van de projectmap. ### Nieuwe migratie toevoegen Wanneer je wijzigingen aanbrengt in de modellen (in `SlpModularCms.Core`): ```powershell dotnet ef migrations add --project src\SlpModularCms.Core --startup-project src\SlpModularCms.Api ``` ### Database bijwerken Om de migraties toe te passen op de database: ```powershell dotnet ef database update --project src\SlpModularCms.Core --startup-project src\SlpModularCms.Api ``` ## Nieuwe Module Toevoegen Het systeem is ontworpen om eenvoudig uitgebreid te worden met nieuwe functionele modules. Volg deze stappen om een nieuwe module toe te voegen: ### 1. Project aanmaken Maak een nieuw .NET 10 Class Library project aan in de `src/` map. Gebruik de naamconventie `SlpModularCms.Modules.`. ```powershell dotnet new classlib -n SlpModularCms.Modules.MijnNieuweModule -o src\SlpModularCms.Modules.MijnNieuweModule -f net10.0 ``` ### 2. Referenties toevoegen Voeg de benodigde referentie naar `Core` toe en voeg het project toe aan de solution: ```powershell dotnet add src\SlpModularCms.Modules.MijnNieuweModule reference src\SlpModularCms.Core dotnet sln SlpModularCms.sln add src\SlpModularCms.Modules.MijnNieuweModule ``` ### 3. IModule implementeren Maak een class aan die de `IModule` interface implementeert: ```csharp using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using SlpModularCms.Core.Modules; namespace SlpModularCms.Modules.MijnNieuweModule; public class MijnNieuweModule : IModule { public string Name => "MijnNieuweModule"; public string Version => "1.0.0"; public void RegisterServices(IServiceCollection services) { // Registreer hier module-specifieke services } public void UseModule(IApplicationBuilder app) { // Configureer hier middleware of andere pipeline zaken } } ``` ### 4. Registreren in de API Om ervoor te zorgen dat de module tijdens ontwikkeling wordt meegenomen in de build-output van de API (zodat de `ModuleOrchestrator` de DLL kan vinden), voeg je een referentie toe aan het API project: ```powershell dotnet add src\SlpModularCms.Api reference src\SlpModularCms.Modules.MijnNieuweModule ``` De `ModuleOrchestrator` zal de module nu automatisch ontdekken en laden bij het opstarten. ## Productie Setup ### 1. Build & Publish Compileer de applicatie voor productie: ```powershell dotnet publish src/SlpModularCms.Api -c Release -o ./publish ``` ### 2. Runtime Configuratie In productie moeten gevoelige instellingen worden doorgegeven via Environment Variables: - `ConnectionStrings__DefaultConnection` - `JwtSettings__Secret` - `JwtSettings__Issuer` - `JwtSettings__Audience` ### 3. Database Zorg dat de doeltabel bestaat en de migraties zijn uitgevoerd. In productie kan dit via een CI/CD pipeline worden afgehandeld met `dotnet ef migrations script` of door de applicatie bij startup migraties te laten draaien (indien geconfigureerd).