Deze map bevat de leerlingusecases voor het bekijken en gebruiken van het oefenaanbod binnen OefenHub. Het subdomein beschrijft welke niveaus, categorieën en oefeningen een leerling op een bepaald moment mag zien en openen. De usecases zijn procesgericht: zij beschrijven server-side autorisatie, niveaucontext, zichtbaarheid, blokkades en vervolgcontext, niet de exacte UI-opmaak van de schermen.
Oefenaanbod en toegang vormt de poort vóór het daadwerkelijk oefenen. Een leerling kan pas een oefening starten wanneer de actuele niveaucontext geldig is, de categorie binnen dat niveau beschikbaar is en de oefening zelf actief en startbaar is. Frontend-zichtbaarheid is daarbij nooit de bron van autorisatie. Elke route naar categorieën of oefeningen wordt opnieuw server-side gecontroleerd.
Usecases
Relevante schermdocumentatie
| Scherm / context | Relevantie |
|---|
| Leerling-frontpage | Toont de actieve niveaucontext, categorienavigatie, populaire categorieën, recent geoefend en vervolgpunten naar oefenaanbod. |
| Oefenaanbod / categorieën | Primaire context waarin beschikbare categorieën en oefeningen voor de leerling zichtbaar worden. |
| Oefening-startpagina | Wordt pas bereikbaar nadat oefeningstoegang server-side is gecontroleerd. |
| Profiel / niveaukeuze | Bron voor het bewust kiezen of herstellen van een verplichte of geselecteerde niveaucontext. |
| Berichtenoverzicht | Kan systeemberichten bevatten over toegekende of ingetrokken toegang, maar berichten zijn niet de autorisatiebron. |
| Ontwerpbronnen — Autorisatiematrix | Centrale bron voor rol- en objecttoegang per actie. |
| Ontwerpbronnen — Business rules | Centrale bron voor niveau-, categorie-, oefening- en autorisatieregels. |
Domeinafbakening
| Onderwerp | Afbakening |
|---|
| Niveaucontext | Bepaalt binnen welk niveau de leerling categorieën en oefeningen ziet. |
| Open niveau | Mag door een leerling worden gebruikt wanneer het niveau actief en open is, zonder individuele niveauautorisatie aan te maken. |
| Privéniveau | Vereist actieve docent-leerlingrelatie en actieve TeacherStudentLevelAccess. |
| Categorieën | Worden getoond wanneer zij actief aan het niveau gekoppeld zijn en actieve onderliggende oefeninginhoud hebben. |
| Oefeningen | Worden getoond wanneer de oefenkoppeling en de oefening zelf actief zijn en de technische module bruikbaar is. |
| Oefening starten | Valt buiten dit subdomein en hoort bij het subdomein oefenen en voortgang. |
| Resultaten en geschiedenis | Worden inhoudelijk uitgewerkt in het subdomein resultaten en geschiedenis. |
| Docentbeheer | Het aanmaken, wijzigen en autoriseren van niveaus, categorieën en oefeningen hoort bij docent- en beheerderusecases. |
| Relaties | Relatievorming en uitnodigingen horen bij generieke relatieusecases. Dit subdomein gebruikt alleen de uitkomst ervan. |
Open en privéniveau
| Niveauvorm | Toegang voor leerling | Belangrijkste bron |
|---|
| Open niveau | Leerling mag het niveau als context gebruiken wanneer het actief en open is. | TeacherLevels en actuele inhoud. |
| Privéniveau | Leerling mag het niveau gebruiken wanneer er een actieve docent-leerlingrelatie en actieve niveauautorisatie bestaan. | UserRelationships en TeacherStudentLevelAccess. |
| Inactief niveau | Niet bruikbaar als actuele leerlingcontext. | TeacherLevels.IsActive. |
| Historische niveaucontext | Kan zichtbaar blijven in afgeronde geschiedenis, maar is geen actuele starttoegang. | ExerciseRuns en geschiedenisregels. |
Bijzondere regels
| Onderwerp | Regel |
|---|
| Server-side controle | Frontend-zichtbaarheid is nooit voldoende autorisatie. De backend controleert leerling, niveau, categorie en oefening opnieuw. |
| Categoriezichtbaarheid | Een categorie wordt alleen als startbare leerlingcategorie getoond wanneer binnen die niveaucontext actieve onderliggende oefeningen bestaan. |
| Oefeningzichtbaarheid | Een oefening is alleen zichtbaar wanneer de oefenkoppeling actief is en de oefening zelf actief is. |
| Onderhoud | Oefeningen in onderhoud zijn niet startbaar voor leerlingen. |
| Open niveau | Open niveaugebruik maakt geen docent-leerlingrelatie en geen TeacherStudentLevelAccess aan. |
| Privéniveau | Privéniveaugebruik vereist actieve relatie en actieve niveauautorisatie. |
| Ingetrokken toegang | Intrekking blokkeert nieuw starten en hervatten binnen die context, maar verwijdert afgeronde geschiedenis niet. |
| Selected level | Een opgeslagen niveaucontext moet opnieuw geldig zijn voordat deze als actuele context wordt gebruikt. |
| Oude routes | Browsergeschiedenis, directe URL's en clientcache geven geen toegang zonder actuele server-side autorisatie. |
| Popups | Deze usecases gebruiken routeguard-, leegstaat- en componentgedrag. Er worden geen nieuwe popupregister-popups geïntroduceerd. |
Diagramgebruik binnen deze usecases
De usecases in dit subdomein gebruiken diagrammen alleen wanneer zij de autorisatie- of routebeslissing verduidelijken.
| Diagramtype | Gebruik |
|---|
| Sequence diagram | Voor interacties tussen leerling, frontend, backend, autorisatielaag en database. |
| Decision flow | Voor server-side beslissingen rond niveau, categorie, oefening en autorisatie. |
| Data lifecycle | Voor onderscheid tussen brondata, afgeleid readmodel en het bewust ontbreken van nieuwe mutaties. |
| State diagram | Alleen wanneer een persistent statusobject geraakt wordt. Voor dit subdomein is dat meestal niet van toepassing. |