UC-LLN-FP-005 — Verder-oefenenblok tonen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-FP-005 |
| Naam | Verder-oefenenblok tonen |
| 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-FP-002 — Actieve niveaucontext toepassen; UC-LLN-OEF-002 — Verder gaan met niet-afgeronde oefening; UC-LLN-OEF-007 — Oefening onderbreken; UC-LLN-TOEG-003 — Oefeningstoegang controleren bij openen; UC-LLN-TOEG-004 — Toegang vervalt door ingetrokken autorisatie |
| Primaire entiteiten | ExerciseRuns, ExerciseRunProgress, TeacherLevels, Exercises, TeacherLevelCategoryExercises |
| Secundaire entiteiten / events | Verder-oefenenreadmodel |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft wanneer en hoe het blok Klaar om verder te oefenen op de leerling-frontpage wordt getoond. Het blok is alleen zichtbaar wanneer binnen de actieve niveaucontext minimaal één niet-afgeronde exercise run bestaat die functioneel hervatbaar is. In dat geval verwijst het blok naar de laatst gestarte en nog niet afgeronde oefening.
De usecase maakt onderscheid tussen bestaan en hervatbaarheid. Een oude niet-afgeronde run kan administratief nog bestaan, maar mag niet als verder-oefeneningang worden getoond wanneer de leerling de onderliggende oefening of niveaucontext niet meer actueel mag openen. Toegang en hervatten worden daarom opnieuw server-side gecontroleerd.
Het blok rondt geen oefening af, maakt geen nieuwe run aan en wijzigt geen voortgang. Het is een afgeleid navigatiepunt naar de bestaande hervatflow. Wanneer geen hervatbare run bestaat, blijft het blok volledig weg of toont de frontpage een neutrale toestand zonder misleidende oproep om verder te gaan.
3. Scope
Deze usecase omvat wel:
- zoeken naar niet-afgeronde runs van de leerling binnen de actieve niveaucontext
- bepalen welke niet-afgeronde run de laatst gestarte hervatbare run is
- controleren of de onderliggende oefening nog actueel toegankelijk is
- tonen van een compact verder-oefenenblok wanneer hervatten mogelijk is
- verbergen van het blok wanneer geen hervatbare run bestaat
- doorverwijzen naar de bestaande hervatflow bij klik
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 de leerling-frontpage moet bepalen of het blok Klaar om verder te oefenen zichtbaar is.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | OefenHub frontend | Leerling-frontpage | Vraagt verder-oefenenstatus op. | Backend start context- en runcontrole. | Geen client-side runselectie. |
| 2 | OefenHub backend | Sessiecontext | Controleert huidige leerling. | Alleen eigen runs worden beoordeeld. | ExerciseRuns.UserId = huidige gebruiker. |
| 3 | OefenHub backend | Niveaucontextresolver | Past actieve niveaucontext toe. | Alleen runs binnen dit niveau tellen mee. | UC-LLN-FP-002. |
| 4 | OefenHub backend | ExerciseRuns | Zoekt niet-afgeronde runs. | Afgeronde runs vallen buiten deze usecase. | IsCompleted = false of geen afrondmoment. |
| 5 | OefenHub backend | Sortering | Sorteert op start- of aanmaakmoment aflopend. | Laatst gestarte niet-afgeronde run wordt kandidaat. | Laatste niet-afgeronde run is leidend. |
| 6 | OefenHub backend | Toegangscontrole | Controleert of de kandidaatrun nog hervatbaar is. | Niet-hervatbare run wordt overgeslagen of leidt tot verborgen blok. | UC-LLN-TOEG-003 / UC-LLN-TOEG-004. |
| 7 | OefenHub backend | Readmodel | Bouwt verder-oefenenweergave. | Response bevat oefening, categorie en voortgangstekst waar beschikbaar. | Geen voortgangswijziging. |
| 8 | OefenHub frontend | Verder-oefenenblok | Toont het blok. | Leerling ziet een directe ingang naar hervatten. | Geen datamutatie. |
| 9 | Leerling | Verder-oefenenblok | Klikt op verder oefenen. | Frontend navigeert naar hervatflow. | UC-LLN-OEF-002. |
| 10 | OefenHub backend | Hervatflow | Controleert bij openen opnieuw toegang en runstatus. | Run wordt alleen hervat wanneer nog geldig. | Dubbele controle blijft verplicht. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Geen geldige niveaucontext | Blok wordt niet opgebouwd. | Niet van toepassing | Geen |
| ALT-002 | 4 | Geen niet-afgeronde runs binnen actieve context | Blok wordt niet getoond. | Niet van toepassing | Geen |
| ALT-003 | 6 | Laatst gestarte run is niet meer toegankelijk | Systeem toont geen misleidende hervatingang of zoekt een andere hervatbare run volgens beleid. | Niet van toepassing | Geen |
| ALT-004 | 6 | Oefening is in onderhoud of verwijderd uit actuele toegang | Blok wordt verborgen; geschiedenisregels blijven los beoordeeld. | Componentmelding / routeguard bij directe link | Geen |
| ALT-005 | 10 | Run is inmiddels afgerond in andere sessie | Hervatflow opent niet; frontpage kan bij verversing het blok verbergen. | Routeguard / componentmelding | Geen |
| ALT-006 | 10 | Leerling gebruikt oude directe hervatlink | Backend blokkeert wanneer run niet meer hervatbaar is. | Routeguard / componentmelding | Geen |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Het verder-oefenenblok is alleen zichtbaar wanneer een niet-afgeronde run binnen de actieve niveaucontext functioneel hervatbaar is. |
| BR-002 | Bij meerdere niet-afgeronde runs wijst de ingang naar de laatst gestarte hervatbare run. |
| BR-003 | Afgeronde runs horen niet in het verder-oefenenblok. |
| BR-004 | Een administratief bestaande run is niet automatisch hervatbaar wanneer actuele toegang ontbreekt. |
| BR-005 | Klikken op het blok leidt naar de hervatusecase en controleert toegang opnieuw. |
| BR-006 | Het tonen van het blok wijzigt geen runvoortgang. |
| BR-007 | Frontendweergave mag nooit zwaarder wegen dan server-side autorisatie. |
| BR-008 | Een frontpageblok mag geen persoonsgegevens of technische identifiers tonen die niet functioneel nodig zijn. |
| BR-009 | Een lege staat mag geen automatische domeinmutatie veroorzaken. |
| BR-010 | Alle teller- en samenvattingswaarden moeten eenduidig zijn afgeleid uit bronrecords en filters. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Exercise run | Moet bij huidige leerling horen en niet afgerond zijn. |
| Niveaucontext | Moet overeenkomen met actieve context. |
| Hervatbaarheid | Onderliggende oefening moet nog actueel toegankelijk zijn. |
| Sortering | Laatste gestarte niet-afgeronde hervatbare run is leidend. |
| Voortgangstekst | Mag alleen uit bestaande voortgangsdata worden afgeleid. |
| 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 |
|---|---|
ExerciseRuns | Blok tonen wijzigt geen runstatus of voortgang. |
ExerciseRunProgress | Voortgang wordt alleen gelezen. |
UserSettings | Verder-oefenen wijzigt geen niveaucontext. |
Exercises | Oefening wordt alleen gelezen voor toegang en weergave. |
| Nieuwe run | Deze usecase maakt geen nieuwe exercise run aan. |
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 Verder-oefenenblok bepalen
16.2 Verder oefenen aanklikken
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-005-001 | SRS-CAT-006 SRS-LRN-002 SRS-LRN-007 AC-CAT-006 AC-LRN-002 AC-LRN-007 | Het verder-oefenenblok alleen tonen wanneer een hervatbare niet-afgeronde run binnen de actieve niveaucontext bestaat |
REQ-UC-LLN-FP-005-002 | SRS-LRN-002 SRS-LRN-007 AC-LRN-002 AC-LRN-007 | Bij meerdere kandidaten de laatst gestarte hervatbare run als ingang gebruiken |
REQ-UC-LLN-FP-005-003 | SRS-AUTH-001 SRS-LRN-002 SRS-LRN-007 AC-AUTH-001 AC-LRN-002 AC-LRN-007 | Actuele oefeningstoegang controleren voordat een run als hervatbaar wordt aangeboden |
REQ-UC-LLN-FP-005-004 | SRS-LRN-002 SRS-LRN-007 AC-LRN-002 AC-LRN-007 | Het tonen van het verder-oefenenblok niet gebruiken om runvoortgang te wijzigen |
REQ-UC-LLN-FP-005-005 | SRS-AUTH-001 SRS-LRN-002 SRS-LRN-007 AC-AUTH-001 AC-LRN-002 AC-LRN-007 | Bij klikken op verder oefenen de bestaande hervatflow gebruiken en opnieuw server-side controleren |