Initial commit with inital CMS
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
# 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 <NaamVanDeMigratie> --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.<Naam>`.
|
||||
```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).
|
||||
Reference in New Issue
Block a user