UC-LLN-FP-004 — Recent geoefend tonen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-FP-004 |
| Naam | Recent geoefend 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-RES-001 — Resultaat na afronding bekijken; UC-LLN-HIS-001 — Oefeninggeschiedenis bekijken; UC-LLN-TOEG-003 — Oefeningstoegang controleren bij openen |
| Primaire entiteiten | ExerciseRuns, TeacherLevels, Categories, Exercises, ExerciseModules |
| Secundaire entiteiten / events | Recent-geoefendreadmodel |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe het blok Recent geoefend op de leerling-frontpage wordt gevuld. Het blok toont de drie laatst afgeronde oefeningen van de huidige leerling binnen het actieve niveau. Per item wordt in compacte vorm getoond om welke categorie en oefening het gaat en wanneer deze voor het laatst is geoefend.
Recent geoefend is een afgeleide weergave op afgeronde exercise runs. Niet-afgeronde runs horen niet in dit blok thuis; die worden apart behandeld via het verder-oefenenblok. De volgorde wordt bepaald door het afrondmoment van de run, niet door startmoment, aanmaakdatum of een losse frontpagestatus.
Het blok is bedoeld als snelle oriëntatie naar recente activiteit. Het openen van een recent item moet opnieuw server-side worden gecontroleerd. Wanneer de oefening niet meer actueel startbaar is, kan resultaat- of geschiedenisweergave nog wel mogelijk zijn afhankelijk van de geschiedenisregels, maar de frontpage mag geen onjuiste starttoegang suggereren.
3. Scope
Deze usecase omvat wel:
- selecteren van afgeronde exercise runs van de leerling
- beperken tot de actuele niveaucontext
- sorteren op afrondmoment aflopend
- tonen van maximaal drie recente items
- tonen van categorie, oefening en laatst geoefend-moment
- onderscheiden tussen recente geschiedenis en hervatbare niet-afgeronde runs
- tonen van lege staat wanneer de leerling nog niets heeft afgerond binnen deze context
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 het blok Recent geoefend moet vullen.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | OefenHub frontend | Leerling-frontpage | Vraagt recente oefenactiviteit op. | Backend start contextcontrole. | Geen client-side geschiedenisbron. |
| 2 | OefenHub backend | Sessiecontext | Controleert ingelogde leerling. | Alleen eigen runs worden gelezen. | 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 | Filtert op afgeronde runs. | Niet-afgeronde runs vallen buiten recent geoefend. | Afrondmoment vereist. |
| 5 | OefenHub backend | Sortering | Sorteert aflopend op afrondmoment. | Meest recent afgerond staat bovenaan. | CompletedAtUtc leidend. |
| 6 | OefenHub backend | Selectie | Neemt maximaal drie items. | Response blijft compact. | Maximaal 3. |
| 7 | OefenHub backend | Contextsnapshot / brondata | Bepaalt categorie- en oefeningnaam voor weergave. | Frontend krijgt betekenisvolle tekst, geen technische ids. | Historische context waar nodig. |
| 8 | OefenHub backend | Readmodel | Bouwt compact recent-geoefendblok. | Blok bevat categorie, oefening en laatst geoefend. | Geen statistiekherberekening. |
| 9 | OefenHub frontend | Recent-geoefendblok | Toont de drie recente items of lege staat. | Leerling ziet recente activiteit. | Geen datamutatie. |
| 10 | Leerling | Recent-geoefendblok | Klikt eventueel op item. | Vervolg bepaalt of resultaat, geschiedenis of startpagina wordt geopend. | Vervolgroute controleert toegang opnieuw. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Geen geldige niveaucontext | Blok wordt niet opgebouwd; frontpage gebruikt herstelroute. | Niet van toepassing | Geen |
| ALT-002 | 4 | Geen afgeronde runs binnen actieve context | Blok wordt niet getoond of toont neutrale lege staat. | Componentmelding / lege staat | Geen |
| ALT-003 | 7 | Actuele oefennaam is gewijzigd na afronding | Weergave gebruikt de vastgelegde historische of functioneel juiste context volgens geschiedenisregels. | Niet van toepassing | Geen |
| ALT-004 | 10 | Oefening is niet meer startbaar | Systeem mag resultaat/geschiedenis tonen, maar blokkeert nieuwe start indien toegang ontbreekt. | Routeguard / componentmelding | Geen |
| ALT-005 | 6 | Minder dan drie afgeronde runs bestaan | Systeem toont alleen beschikbare items. | Niet van toepassing | Geen |
| ALT-006 | 4 | Run is testrun of niet voor leerlinggeschiedenis bedoeld | Run telt niet mee in recent geoefend. | Niet van toepassing | Geen |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Recent geoefend toont maximaal drie laatst afgeronde exercise runs binnen het actieve niveau. |
| BR-002 | Niet-afgeronde runs horen niet in Recent geoefend maar in de verder-oefenenlogica. |
| BR-003 | Afrondmoment is leidend voor sortering. |
| BR-004 | De weergave toont betekenisvolle domeingegevens en geen technische GUIDs. |
| BR-005 | Klikken op een recent item geeft geen automatische starttoegang zonder server-side controle. |
| BR-006 | Docenttestruns en niet-permanente runs tellen niet mee. |
| 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 de huidige leerling horen. |
| Afrondstatus | Run moet geldig afgerond zijn. |
| Niveaucontext | Run moet binnen de actieve niveaucontext vallen. |
| Aantal items | Maximaal drie. |
| Weergavegegevens | Categorie en oefening moeten functioneel begrijpelijk worden getoond. |
| 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 | Recent lezen wijzigt geen run. |
UserSettings | Recent geoefend wijzigt geen niveau of voorkeur. |
Exercises | Oefeningen worden alleen gelezen voor weergave. |
Categories | Categorieën worden alleen gelezen voor weergave. |
| Geschiedenis | Deze usecase opent geen volledige geschiedenis en wijzigt geen geschiedenisdata. |
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 Recent geoefend samenstellen
16.2 Recent item openen
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-004-001 | SRS-LRN-009 AC-LRN-009 | Recent geoefend baseren op afgeronde exercise runs van de huidige leerling |
REQ-UC-LLN-FP-004-002 | SRS-CAT-006 SRS-LRN-009 AC-CAT-006 AC-LRN-009 | Recent geoefend beperken tot de actuele niveaucontext |
REQ-UC-LLN-FP-004-003 | SRS-LRN-006 SRS-NFR-PER-001 AC-LRN-006 AC-NFR-PER-001 | Maximaal drie recente items tonen, gesorteerd op afrondmoment aflopend |
REQ-UC-LLN-FP-004-004 | SRS-LRN-008 AC-LRN-008 | Niet-afgeronde runs niet tonen als recent geoefend |
REQ-UC-LLN-FP-004-005 | SRS-AUTH-001 SRS-LRN-009 AC-AUTH-001 AC-LRN-009 | Vervolgacties vanuit recent geoefend opnieuw server-side controleren |