UC-LLN-FP-002 — Actieve niveaucontext toepassen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-FP-002 |
| Naam | Actieve niveaucontext toepassen |
| Domein | Leerling / Frontpage en niveaucontext |
| Primaire actor | Leerling |
| Secundaire actor(en) | OefenHub frontend, OefenHub backend, routeguard, autorisatielaag, database, frontpage-readmodel |
| Rolcontext | Ingelogde gebruiker met rol Leerling en een geldige of te herstellen niveaucontext. |
| Betrokken schermen | Leerling-frontpage, leerlingnavigatie, frontpageblokken, routeguard voor leerlingroutes. |
| Gerelateerde usecases | UC-LLN-FP-001 — Leerling-frontpage bekijken; UC-LLN-TOEG-005 — Open niveau gebruiken; UC-LLN-TOEG-006 — Privéniveau gebruiken via autorisatie; UC-GEN-PROF-003 — Verplicht niveau instellen; UC-GEN-ACC-003 — Geen rol of onvolledig account afhandelen |
| Primaire entiteiten | Users, UserSettings, TeacherLevels, TeacherStudentLevelAccess, UserRelationships |
| Secundaire entiteiten / events | Niveaucontextresolver, routeguard, afgeleide contextrespons |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe OefenHub de actieve niveaucontext van een leerling toepast wanneer de leerling-frontpage of een leerlinggerichte vervolgquery wordt opgebouwd. De niveaucontext bepaalt welke categorieën, oefeningen, oefenruns en samenvattingswaarden relevant zijn.
De actieve niveaucontext is geen losstaand frontpageobject. Zij wordt afgeleid uit het interne account, de opgeslagen gebruikersinstellingen, de actuele beschikbaarheid van het niveau, open-niveauregels en eventueel actieve docent-leerlingautorisaties. Een opgeslagen gekozen niveau mag niet blind worden vertrouwd wanneer het niveau inmiddels inactief is, de autorisatie is ingetrokken of de leerling niet meer binnen die context mag werken.
Deze usecase kiest niet zelfstandig een nieuw willekeurig niveau voor de leerling. Wanneer een niveau bewust gekozen of hersteld moet worden, wordt verwezen naar de bestaande profielusecase voor verplicht niveau instellen of naar de accountflow voor onvolledige context. Daardoor blijft de niveaukeuze één bron van waarheid en wordt frontpagelogica geen tweede profielbeheerflow.
3. Scope
Deze usecase omvat wel:
- lezen van de opgeslagen of afleidbare niveaucontext
- server-side valideren of de context nog toegankelijk is
- onderscheiden tussen open niveau en privéniveau via autorisatie
- gebruiken van de geldige context voor frontpage- en aanbodqueries
- blokkeren van verouderde of ongeldige niveaucontext
- doorverwijzen naar bestaande profiel- of accountflows wanneer context ontbreekt
Deze usecase omvat niet:
- instellen van een verplicht niveau; dat hoort bij UC-GEN-PROF-003
- aanmaken of wijzigen van categorieën, oefeningen of niveaus
- toekennen of intrekken van niveauautorisaties
- starten, genereren of afronden van een oefening
- uitwerken van resultaten, geschiedenis of PDF-export
- uitwerken van systeemnotificaties; die lopen via UC-GEN-NOT-001 t/m UC-GEN-NOT-003
- opslaan van een aparte frontpagecache of frontpagebronrecord
DRY-afbakening voor deze usecase: profielbeheer, docentbeheer, relatievorming, systeemnotificaties en oefenuitvoering blijven bij hun eigen usecases. Deze frontpageusecase gebruikt alleen de uitkomsten daarvan als input of vervolgcontext.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd. |
| PRE-002 | De gebruiker heeft de rol Leerling als actieve rolcontext. |
| PRE-003 | De backend kan de actuele account- en sessiecontext server-side bepalen. |
| PRE-004 | De relevante frontpage-, niveau- en oefendata zijn beschikbaar voor uitlezing. |
| PRE-005 | Routeguard en autorisatielaag vertrouwen niet op clientstate als autorisatiebron. |
| PRE-006 | Bestaande profiel- en accountflows zijn beschikbaar voor herstel van ontbrekende context. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De leerling ziet alleen informatie die binnen de actuele server-side context zichtbaar mag zijn. |
| POST-002 | Er is geen nieuwe frontpage-, sessie- of cache-entiteit aangemaakt. |
| POST-003 | Ontbrekende of ongeldige context leidt niet tot misleidende frontpageweergave. |
| POST-004 | Vervolgacties blijven onderhevig aan eigen server-side toegangscontrole. |
| POST-005 | Er zijn geen rollen, relaties, autorisaties, oefeningen of oefenruns aangemaakt of gewijzigd. |
| POST-006 | Eventuele lege staten zijn veilig en verwijzen niet naar ongeautoriseerde inhoud. |
6. Trigger
De usecase start wanneer een leerlinggerichte pagina, frontpageblok of oefenaanbodquery een actuele niveaucontext nodig heeft.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | OefenHub frontend | Leerling-frontpage / route | Vraagt data op waarvoor niveaucontext nodig is. | Backend start contextresolutie. | Geen niveau uit clientstate als waarheid. |
| 2 | OefenHub backend | Sessiecontext | Leest de ingelogde gebruiker en rolcontext. | Alleen leerlingcontext gaat verder. | Actieve rol Leerling vereist. |
| 3 | OefenHub backend | UserSettings | Leest opgeslagen geselecteerde niveaucontext. | Systeem verkrijgt kandidaatniveau. | UserSettings is bron voor bewuste keuze, maar moet gevalideerd worden. |
| 4 | OefenHub backend | TeacherLevels | Controleert of het kandidaatniveau bestaat en actief is. | Ongeldig of inactief niveau valt af. | Geen stille acceptatie van verlopen context. |
| 5 | OefenHub backend | Toegangscontrole | Bepaalt of het niveau open of geautoriseerd privé is. | Alleen toegankelijke context blijft geldig. | UC-LLN-TOEG-005 / UC-LLN-TOEG-006. |
| 6 | OefenHub backend | Niveaucontextresolver | Markeert de context als geldig. | Frontpage- en aanbodqueries krijgen dezelfde context mee. | Geen nieuwe database-entiteit. |
| 7 | OefenHub backend | Readmodelqueries | Gebruikt de context voor categorieën, oefeningen en runs. | Alle blokken tonen dezelfde niveauafbakening. | Consistente context over blokken heen. |
| 8 | OefenHub frontend | Leerling-frontpage | Toont de frontpage binnen de context. | Leerling ziet geen informatie uit andere niveaus als actuele context. | Geen datamutatie. |
| 9 | Leerling | Vervolgactie | Kiest categorie, oefening of vervolgblok. | Vervolgusecase controleert opnieuw server-side. | Context is input, geen definitieve toegangsgarantie. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Er is geen opgeslagen niveaucontext | Systeem leidt naar UC-GEN-PROF-003 of UC-GEN-ACC-003 afhankelijk van de oorzaak. | Niet van toepassing | Geen |
| ALT-002 | 4 | Opgeslagen niveau bestaat niet meer of is inactief | Context wordt geweigerd en de leerling krijgt herstelroute. | Componentmelding / routeguard | Geen |
| ALT-003 | 5 | Privéniveauautorisatie is ingetrokken | Context wordt niet meer toegepast; startbare inhoud wordt niet getoond. | Componentmelding / routeguard | Geen |
| ALT-004 | 5 | Open niveau is niet langer open of beschikbaar | Context wordt ongeldig en leerling moet andere geldige context kiezen. | Componentmelding / routeguard | Geen |
| ALT-005 | 6 | Meerdere niveaus zijn beschikbaar maar geen geldige selectie bestaat | Systeem kiest niet willekeurig; bestaande keuze-/profielroute neemt over. | Niet van toepassing | Geen |
| ALT-006 | 9 | Vervolgroute gebruikt oud niveau-id | Vervolgusecase controleert opnieuw en blokkeert indien nodig. | Niet van toepassing | Geen |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Een opgeslagen niveaucontext moet bij ieder relevant gebruik opnieuw server-side geldig zijn. |
| BR-002 | OefenHub kiest niet stilzwijgend een willekeurig standaardniveau wanneer een bewuste keuze ontbreekt. |
| BR-003 | Open niveaugebruik en privéniveaugebruik hebben verschillende toegangsbronnen. |
| BR-004 | De niveaucontext is input voor frontpage- en aanbodqueries, geen aparte persistente sessietabel. |
| BR-005 | Wanneer de context ongeldig is, mag de leerling geen actuele oefeninhoud uit die context zien of starten. |
| BR-006 | Frontendweergave mag nooit zwaarder wegen dan server-side autorisatie. |
| BR-007 | Een frontpageblok mag geen persoonsgegevens of technische identifiers tonen die niet functioneel nodig zijn. |
| BR-008 | Een lege staat mag geen automatische domeinmutatie veroorzaken. |
| BR-009 | Alle teller- en samenvattingswaarden moeten eenduidig zijn afgeleid uit bronrecords en filters. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
UserSettings.SelectedTeacherLevelId | Moet verwijzen naar een bestaand en actueel bruikbaar niveau. |
| Open niveau | Moet actief en functioneel open zijn. |
| Privéniveau | Vereist actieve docent-leerlingrelatie en actieve niveauautorisatie. |
| Rolcontext | Moet leerling zijn. |
| Routecontext | Mag niet zwaarder wegen dan server-side contextvalidatie. |
| Frontpagecontext | Moet per request opnieuw uit server-side context worden afgeleid. |
| Clientstate | Mag alleen ondersteunend zijn en nooit autorisatie bepalen. |
| Lege staat | Moet functioneel neutraal zijn en geen verborgen of ongeautoriseerde data lekken. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| Gehele usecase | Geen domeinmutatie | Niet van toepassing | De usecase leest bestaande bronrecords en stelt een transient readmodel samen; er wordt geen functioneel domeinevent vastgelegd. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
UserSettings | Deze usecase wijzigt de niveaukeuze niet; kiezen hoort bij profielflow. |
TeacherStudentLevelAccess | Autorisaties worden niet aangemaakt of aangepast. |
UserRelationships | Relaties worden niet aangemaakt of aangepast. |
ExerciseRuns | Contexttoepassing start of wijzigt geen oefenrun. |
| Sessietabel | Er wordt geen aparte niveaucontextsessietabel toegevoegd. |
UserRoles | Frontpagecontext wijzigt geen roltoekenningen. |
SystemNotifications | Notificaties worden in generieke notificatieusecases verwerkt. |
13. State diagram
Niet van toepassing. Deze usecase wijzigt geen persistent statusobject. De weergegeven frontpage- of bloktoestand is afgeleid uit account-, niveau-, oefen- en rungegevens en vormt geen zelfstandige lifecycle.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Niveaucontext valideren
16.2 Ingetrokken of verlopen context
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Gehele usecase | Deze usecase gebruikt routeguard-, component- of lege-staatgedrag en introduceert geen popupregister-popup. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Functioneel Ontwerp beschrijft de leerling-frontpage, actieve niveaucontext, frontpageblokken, lege toestanden en zichtbare vervolgacties. |
| Technisch Ontwerp | Technisch Ontwerp: rolflows, readmodels, tellers en badges en frontend-compositie beschrijft de technische afbakening, server-side brondata, autorisatie en UI-compositie voor deze usecase. |
| Software Requirements Specification | Software Requirements Specification bevat centrale eisen en acceptatiecriteria voor contextcontrole, frontpageweergave, readmodels en veilige lege toestanden. |
| Database-informatie | Database-informatie blijft bron voor onderliggende tabellen, readmodelbronnen en soft-link/snapshotregels; deze usecases introduceren geen eigen frontpagetabel. |
| Ontwerpbronnen | Ontwerpbronnen bevatten aanvullende businessregels voor frontpageblokken, contextafleiding en zichtbare acties. |
19. SRS-trace
Deze usecase bevat geen normatieve requirementtekst. De centrale eis en acceptatiecriteria staan in de SRS; onderstaande tabel koppelt de usecase-afleiding alleen aan centrale SRS-*- en AC-*-items.
| Usecase-afleiding | Dekt | Usecasecontext |
|---|---|---|
REQ-UC-LLN-FP-002-001 | SRS-AUTH-001 SRS-CAT-006 SRS-LRN-009 AC-AUTH-001 AC-CAT-006 AC-LRN-009 | Een opgeslagen leerlingniveaucontext opnieuw server-side valideren voordat deze wordt toegepast |
REQ-UC-LLN-FP-002-002 | SRS-AUTH-001 SRS-CAT-006 SRS-LRN-009 AC-AUTH-001 AC-CAT-006 AC-LRN-009 | Open niveaugebruik en privéniveaugebruik volgens hun eigen toegangsbronnen beoordelen |
REQ-UC-LLN-FP-002-003 | SRS-CAT-001 SRS-LRN-009 AC-CAT-001 AC-LRN-009 | Geen willekeurig standaardniveau kiezen wanneer een verplichte of geldige keuze ontbreekt |
REQ-UC-LLN-FP-002-004 | SRS-AUTH-001 SRS-CAT-006 SRS-LRN-009 AC-AUTH-001 AC-CAT-006 AC-LRN-009 | Ongeldige, ingetrokken of inactieve niveaucontexten blokkeren voor actuele frontpage- en aanbodweergave |
REQ-UC-LLN-FP-002-005 | SRS-CAT-006 SRS-LRN-009 AC-CAT-006 AC-LRN-009 | Niveaucontext niet als aparte sessie-entiteit opslaan |