UC-LLN-TOEG-002 — Beschikbare oefeningen bekijken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-TOEG-002 |
| Naam | Beschikbare oefeningen bekijken |
| Domein | Leerling / Oefenaanbod en toegang |
| Primaire actor | Leerling |
| Secundaire actor(en) | OefenHub frontend, OefenHub backend, autorisatielaag, database, oefening-readmodel, routeguard |
| Rolcontext | Ingelogde leerling met geldige actieve niveaucontext en een gekozen categorie binnen die context. |
| Betrokken schermen | Categoriepagina, oefeningenlijst binnen categorie, leerlingnavigatie, oefeningstartlink, routeguard. |
| Gerelateerde usecases | UC-LLN-TOEG-001 — Beschikbare categorieën bekijken; UC-LLN-TOEG-003 — Oefeningstoegang controleren bij openen; UC-LLN-OEF-001 — Oefening-startpagina openen; UC-LLN-FP-001 — Leerling-frontpage bekijken |
| Primaire entiteiten | Users, UserSettings, TeacherLevels, TeacherLevelCategories, TeacherLevelCategoryExercises, Exercises |
| Secundaire entiteiten / events | Categories, ExerciseModules, TeacherStudentLevelAccess, UserRelationships |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een leerling binnen een toegankelijke categorie de beschikbare oefeningen bekijkt. De oefenlijst is een afgeleide weergave van concrete docent-oefeningen die via een niveau- categorie-koppeling aan het actieve niveau beschikbaar zijn gemaakt. Een oefening is pas zichtbaar wanneer zowel de niveaucontext, de categorie-koppeling, de oefenkoppeling als de oefening zelf functioneel actief zijn.
De leerling ziet geen technische moduleconfiguratie, geen onderhoudsoefeningen en geen oefeningen die alleen voor docenttesten bedoeld zijn. De lijst is bedoeld als veilige ingang naar de oefeningstartpagina. Het openen of starten van een oefening wordt alsnog opnieuw server-side gecontroleerd in UC-LLN-TOEG-003 en de oefenflows. Hierdoor blijft de oefeningenlijst een readmodel en geen autorisatiebron.
Deze usecase maakt geen exercise run aan. Nieuwe runs ontstaan pas wanneer de leerling in de oefenflow daadwerkelijk kiest voor het starten van een nieuwe oefening. Het bekijken van beschikbare oefeningen mag ook geen geschiedenis, statistieken, relaties of systeemberichten aanpassen.
3. Scope
Deze usecase omvat wel:
- laden van oefeningen binnen een gekozen categorie
- controleren dat de categorie bij de actuele niveaucontext hoort
- server-side filteren op actieve oefenkoppeling en actieve oefening
- uitsluiten van oefeningen in onderhoud
- tonen van leerlinggeschikte oefennaam en icoon
- sorteren van oefeningen binnen de categorie
- tonen van lege staat wanneer de categorie geen beschikbare oefeningen meer bevat
- voorbereiden van een veilige route naar de oefeningstartpagina
Deze usecase omvat niet:
- aanmaken of bewerken van oefeningen
- wijzigen van moduleconfiguratie
- starten of genereren van een exercise run
- beantwoorden van vragen
- resultaatweergave of geschiedenis
- docent-testmodus
- delen van oefeningen met vrienden
- modulebeheer of modulemigratie
- wijzigen van categorieën of niveauautorisaties
DRY-afbakening voor deze usecase: beheer van niveaus, categorieën, oefeningen, relaties en autorisaties blijft bij de daarvoor bedoelde docent-, beheerder-, profiel- en relatieusecases. Deze usecase gebruikt de uitkomst daarvan als toegangsvoorwaarde en maakt die processen niet opnieuw bronhoudend.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is ingelogd als leerling. |
| PRE-002 | Er is een geldige actieve niveaucontext. |
| PRE-003 | De gekozen categorie is binnen die niveaucontext zichtbaar volgens UC-LLN-TOEG-001. |
| PRE-004 | De backend kan de categorie- en oefenkoppelingen server-side valideren. |
| PRE-005 | De oefeningenlijst wordt opgebouwd uit actuele databasegegevens en niet uit oude clientcache. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De leerling ziet alleen oefeningen die binnen de gekozen categorie en actieve niveaucontext beschikbaar zijn. |
| POST-002 | Oefeningen in onderhoud of inactieve oefenkoppelingen zijn niet zichtbaar als startbare oefening. |
| POST-003 | De getoonde oefennaam en het icoon komen uit Exercises. |
| POST-004 | Er is geen exercise run aangemaakt. |
| POST-005 | Een vervolg naar de oefeningstartpagina blijft opnieuw server-side controleplichtig. |
| POST-006 | Bij lege oefenlijst wordt geen automatische fallbackoefening gekozen. |
6. Trigger
De usecase start wanneer de leerling een beschikbare categorie kiest of wanneer de frontend de oefeningenlijst voor een categorie binnen het actieve niveau moet laden.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Leerling | Categorieoverzicht | Kiest een categorie. | Frontend vraagt beschikbare oefeningen op. | Categorie-id is routecontext, geen autorisatiebron. |
| 2 | Frontend | Oefeningenlijst | Stuurt categorie- en niveaucontext naar backend. | Backend gebruikt sessiecontext als waarheid. | UserId uit sessie. |
| 3 | Backend | Autorisatielaag | Valideert leerlingrol en actieve niveaucontext. | Bij ongeldige context wordt de lijst niet vrijgegeven. | Server-side check. |
| 4 | Backend | Categoriecontrole | Controleert dat categorie actief aan het niveau is gekoppeld. | Alleen geldige niveau-categorie blijft over. | TeacherLevelCategories. |
| 5 | Backend | Oefenkoppelingen | Haalt actieve TeacherLevelCategoryExercises op. | Inactieve koppelingen vallen af. | IsActive = true. |
| 6 | Backend | Oefeningen | Leest gekoppelde Exercises. | Alleen actieve oefeningen komen in het readmodel. | Exercises.IsActive = true. |
| 7 | Backend | Modulecontext | Controleert of de gekoppelde technische module regulier bruikbaar is waar nodig. | Niet-bruikbare oefening wordt niet als startbare optie aangeboden. | ExerciseModules als technische randvoorwaarde. |
| 8 | Backend | Sortering | Sorteert op categorievolgorde en oefenvolgorde. | Response is stabiel en leerlinggeschikt. | SortOrder. |
| 9 | Frontend | Oefeningenlijst | Toont beschikbare oefeningen. | Leerling ziet naam, icoon en startbare route. | Geen configuratiepayload tonen. |
| 10 | Leerling | Oefeningenlijst | Kiest een oefening. | Vervolg naar UC-LLN-TOEG-003. | Toegang opnieuw controleren. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 3 | Niveaucontext ontbreekt of is verlopen. | Oefeningenlijst wordt niet getoond; bestaande contextflow neemt over. | Geen popupregister-popup. | Geen. |
| ALT-002 | 4 | Categorie hoort niet bij actief niveau. | Backend retourneert geen oefeningen en routeguard blokkeert vervolg. | Geen. | Geen. |
| ALT-003 | 5 | Geen actieve oefenkoppelingen. | Frontend toont lege staat voor deze categorie. | Leegstaatcomponent. | Geen. |
| ALT-004 | 6 | Oefening staat in onderhoud. | Oefening wordt niet getoond als leerlingoptie. | Geen. | Geen. |
| ALT-005 | 7 | Technische module is niet beschikbaar voor regulier gebruik. | Oefening wordt niet als startbaar aangeboden of bij vervolg geblokkeerd. | Geen domeinpopup. | Geen. |
| ALT-006 | 8 | Oefenvolgorde bevat dubbele waarden. | Systeem gebruikt stabiele fallbacksortering. | Geen. | Geen. |
| ALT-007 | 10 | Leerling opent oude link naar niet meer beschikbare oefening. | Vervolgroute wordt geblokkeerd in UC-LLN-TOEG-003. | Routeguardafhandeling. | Geen. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Een oefening is voor een leerling alleen zichtbaar wanneer zij binnen een toegankelijke niveau-categorie actief gekoppeld is. |
| BR-002 | Een inactieve oefening of oefening in onderhoud wordt niet als startbare leerlingoefening getoond. |
| BR-003 | Een inactieve TeacherLevelCategoryExercises-koppeling maakt de oefening onzichtbaar in die categoriecontext. |
| BR-004 | De oefeningenlijst toont geen moduleconfiguratiepayload. |
| BR-005 | De oefeningenlijst maakt geen exercise run aan. |
| BR-006 | Het openen van een oefening vanuit de lijst vereist opnieuw server-side controle. |
| BR-007 | Een lege categorie veroorzaakt geen automatische keuze van een andere categorie of oefening. |
| BR-008 | Historische runs of eerder zichtbare oefeningen bepalen niet de actuele oefeningenlijst. |
| BR-009 | Docent-testzichtbaarheid is geen leerlingzichtbaarheid. |
| BR-010 | Clientcache mag een verdwenen of gedeactiveerde oefening niet startbaar houden. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Categorie-id | Moet horen bij een actieve TeacherLevelCategories-koppeling binnen het actuele niveau. |
| Oefenkoppeling | Moet actief zijn binnen TeacherLevelCategoryExercises. |
| Oefening | Moet bestaan en Exercises.IsActive = true hebben. |
| Technische module | Moet regulier bruikbaar zijn voor leerlinggebruik wanneer de oefening startbaar wordt aangeboden. |
| Leerlingcontext | Moet server-side geldig zijn. |
| Sortering | Mag ontbreken zonder de autorisatiebeslissing te beïnvloeden. |
| Route naar oefening | Mag niet worden beschouwd als bewijs van toegang. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 1 | Read | TeacherLevelCategories | Categoriecontext wordt gecontroleerd. |
| 5 | Read | TeacherLevelCategoryExercises | Actieve oefenkoppelingen worden gelezen. |
| 6 | Read | Exercises | Actieve oefeningen worden gelezen. |
| 7 | Read | ExerciseModules | Reguliere bruikbaarheid wordt gecontroleerd. |
Deze usecase kent geen persistente domeinevents. De oefeningenlijst is een actuele server-side afleiding en geen bronrecord.
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
Exercises | Leerling bekijkt oefeningen maar wijzigt ze niet. |
TeacherLevelCategoryExercises | Koppeling wordt gelezen maar niet aangepast. |
ExerciseRuns | Run ontstaat pas in startflow. |
ExerciseHistory | Geen oefenwijziging. |
UserSettings | Categorie bekijken wijzigt geen niveaukeuze. |
SystemMessages | Geen systeembericht. |
13. State diagram
Niet van toepassing. Deze usecase raakt geen persistent statusobject met een eigen lifecycle. Toegang en zichtbaarheid worden afgeleid uit actuele niveaucontext, autorisaties, actieve relaties en contentstatussen.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Moment | Doel |
|---|---|---|
| Niet van toepassing | Niet van toepassing | Deze usecase gebruikt routeguard-, leegstaat- of componentgedrag en geen popupregister-popup. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Functioneel Ontwerp beschrijft zichtbaar oefenaanbod, niveaucontext, categorie-/oefeningtoegang en veilige blokkades. |
| Technisch Ontwerp | Technisch Ontwerp: autorisatie en contextcontrole, oefencatalogus, readmodels en frontend-routing 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 aanbodfiltering, server-side autorisatie, blokkades en geen ongewenste datamutaties. |
| Database-informatie | Database-informatie blijft bron voor catalogus-, autorisatie- en soft-linkrelaties waarmee zichtbaar aanbod server-side wordt bepaald. |
| Ontwerpbronnen | Ontwerpbronnen bevatten aanvullende businessregels voor oefenaanbod, niveaus, categorieën en autorisatiegrenzen. |
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-TOEG-002-001 | SRS-AUTH-001 SRS-RDM-001 SRS-RDM-005 SRS-CAT-006 SRS-LRN-009 AC-AUTH-001 AC-RDM-001 AC-RDM-005 AC-CAT-006 AC-LRN-009 | Oefeningen voor leerlingen server-side filteren op categorie en actuele niveaucontext |
REQ-UC-LLN-TOEG-002-002 | SRS-LRN-009 AC-LRN-009 | Alleen actieve oefenkoppelingen tonen |
REQ-UC-LLN-TOEG-002-003 | SRS-LRN-001 AC-LRN-001 | Alleen actieve oefeningen als startbare leerlingoptie tonen |
REQ-UC-LLN-TOEG-002-004 | SRS-LRN-001 AC-LRN-001 | Oefeningen in onderhoud niet tonen als startbare leerlingoefening |
REQ-UC-LLN-TOEG-002-005 | SRS-LRN-009 AC-LRN-009 | Het bekijken van oefeningen uitvoeren zonder exercise run aan te maken |
REQ-UC-LLN-TOEG-002-006 | SRS-AUTH-001 SRS-LRN-009 AC-AUTH-001 AC-LRN-009 | Het openen van een oefening opnieuw server-side laten controleren |
REQ-UC-LLN-TOEG-002-007 | SRS-RDM-001 SRS-RDM-005 SRS-CAT-001 SRS-LRN-009 AC-RDM-001 AC-RDM-005 AC-CAT-001 AC-LRN-009 | Een lege staat tonen wanneer een categorie geen beschikbare oefeningen bevat |
REQ-UC-LLN-TOEG-002-008 | SRS-RDM-001 SRS-RDM-005 SRS-LRN-009 SRS-MOD-003 AC-RDM-001 AC-RDM-005 AC-LRN-009 AC-MOD-003 | Moduleconfiguratiepayloads niet in de leerlinglijst tonen |
REQ-UC-LLN-TOEG-002-009 | SRS-LRN-009 SRS-TCH-005 AC-LRN-009 AC-TCH-005 | Docent-testzichtbaarheid niet verwarren met leerlingzichtbaarheid |
REQ-UC-LLN-TOEG-002-010 | SRS-LRN-009 AC-LRN-009 | Oefeningvolgorde stabiel kunnen bepalen |
REQ-UC-LLN-TOEG-002-011 | SRS-LRN-009 SRS-MOD-003 SRS-NFR-SEC-001 AC-LRN-009 AC-MOD-003 AC-NFR-SEC-001 | Technische moduleonbeschikbaarheid veilig afhandelen |
REQ-UC-LLN-TOEG-002-012 | SRS-RDM-001 SRS-LRN-009 SRS-GUA-001 AC-RDM-001 AC-LRN-009 AC-GUA-001 | Verouderde lijstitems corrigeren op basis van actuele backenddata |