2. C4 niveau 2 — Container Diagram
Tekstuele modellering
Op C4 niveau 2 wordt OefenHub niet meer als één enkel systeem in zijn omgeving weergegeven, maar opgesplitst in de belangrijkste intern relevante containers. In de huidige fase is bewust gekozen voor een modulaire monolithische opzet.
Containers binnen OefenHub
- OefenHub Webapp — de primaire .NET / C# / Blazor Web App waarin gebruikersinterface, businesslogica, objectniveau-autorisatie, SignalR-gebaseerde realtime-functionaliteit, TickerQ-gestuurde background jobs en QuestPDF-gebaseerde documentexport samenkomen.
- OefenHub Database — relationele database voor domeindata, configuratie, historie, auditgerelateerde records en operationele opslag van gebruikers-, relatie-, inhouds- en oefengegevens.
Externe systemen rond de containers
- Keycloak
- Mailvoorziening
Toelichting bij het diagram
Het containerdiagram houdt de architectuur op dit niveau bewust compact. De kern van OefenHub bestaat in fase 1 uit een modulaire monolithische webapplicatie met een eigen database. Externe afhankelijkheden blijven beperkt tot identity/authenticatie via Keycloak en mailafhandeling via een mailvoorziening.

Figuur 2 — OefenHub C4 niveau 2: Container Diagram
workspace "OefenHub" "C4 model niveau 2 - Container Diagram" {
model {
leerling = person "Leerling" "Maakt oefeningen, hervat runs en bekijkt resultaten binnen toegestane niveaucontext."
ouder = person "Ouder/voogd" "Bekijkt gekoppelde leerlingdata en kan live meekijken."
docent = person "Docent" "Beheert niveaus, categorieën, oefeningen en leerlingtoegang."
beheerder = person "Beheerder" "Beheert accounts, centrale inhoud, instellingen en systeembeheer."
testdocent = person "TestDocent" "Gebruikt testmodules in een gecontroleerde docentcontext."
oefenhub = softwareSystem "OefenHub" "Nederlandstalige webapplicatie voor oefenen, voortgang, beheer en ondersteuning van leerlingen, ouders/voogden, docenten en beheerders." {
webapp = container "OefenHub Webapp" "Primaire .NET / C# / Blazor Web App met gebruikersinterface, businesslogica, objectniveau-autorisatie, SignalR-realtime, TickerQ-background jobs en QuestPDF-documentgeneratie." ".NET / C# / Blazor Web App"
database = container "OefenHub Database" "Slaat domeindata, configuratie, historie, auditgerelateerde records en operationele applicatiegegevens op." "SQL Database"
}
keycloak = softwareSystem "Keycloak" "Externe identity provider voor authenticatie, registratie, sessies en credential-lifecycle."
mail = softwareSystem "Mailvoorziening" "Externe e-mailafhandeling voor verificaties, uitnodigingen en notificatiegerelateerde processen."
leerling -> webapp "Maakt oefeningen, hervat runs en bekijkt resultaten"
ouder -> webapp "Bekijkt gekoppelde leerlingdata en kijkt live mee"
docent -> webapp "Beheert niveaus, inhoud en leerlingtoegang"
beheerder -> webapp "Voert systeem- en domeinbeheer uit"
testdocent -> webapp "Test oefenmodules en testgedrag"
webapp -> database "Leest en schrijft domeindata, configuratie, historie en auditgegevens"
webapp -> keycloak "Gebruikt voor authenticatie, registratie en identity-gerelateerde flows"
webapp -> mail "Verstuurt verificaties, uitnodigingen en notificatie-e-mails"
}
views {
container oefenhub "ContainerDiagram" {
include *
autolayout lr
title "OefenHub - C4 niveau 2 - Container Diagram"
}
theme default
}
}