Skip to main content

UC-LLN-HIS-002 — Geschiedenis filteren en pagineren

1. Kerngegevens

VeldWaarde
Usecase-IDUC-LLN-HIS-002
NaamGeschiedenis filteren en pagineren
DomeinLeerling / Resultaten, statistieken, geschiedenis en PDF-export
Primaire actorLeerling
Secundaire actor(en)OefenHub frontend, OefenHub backend, database, technische oefenmodule
RolcontextIngelogde leerling met een geldige leerlingcontext en toegang tot de eigen resultaat- of geschiedenisgegevens.
Betrokken schermenOefeninggeschiedenispagina, filterregel, paginering, geschiedenistabel, lege filterstaat.
Gerelateerde usecasesUC-LLN-HIS-001 — Oefeninggeschiedenis bekijken; UC-LLN-HIS-003 — Resultaatdetail vanuit geschiedenis openen; UC-LLN-HIS-004 — Geschiedenis alles bekijken
Primaire entiteitenExerciseRuns als gefilterd readmodel
Secundaire entiteiten / eventsFilterparameters, pagineringsparameters, geschiedenisreadmodel
Gerelateerde popupsNiet van toepassing
PopupregisterNiet van toepassing; deze flow gebruikt routeguard-, leegstaat- of componentgedrag.
MoSCoWMust

2. Omschrijving

Deze usecase beschrijft hoe een leerling de oefeninggebonden geschiedenis filtert en door pagina's navigeert. De filter- en pagineringsinteractie werkt altijd binnen de reeds geautoriseerde geschiedenisdataset. Filters mogen de dataset beperken, maar nooit uitbreiden naar andere leerlingen, niet-toegankelijke niveaus of ongeautoriseerde oefeningcontexten. Paginering bepaalt uitsluitend welk deel van de geautoriseerde resultaten wordt getoond.

De usecase raakt geen brondata van exercise runs. Filterkeuzes, paginagrootte en pagina-index zijn presentatie- en queryparameters. Wanneer een filter geen resultaten oplevert, toont het systeem een normale lege staat.

Deze usecase is onderdeel van het leerlingdomein Resultaten, statistieken, geschiedenis en PDF-export. De flow gebruikt bestaande exercise-rungegevens, historische niveau-, categorie- en oefeningcontext en de uniforme resultaatvelden die tijdens oefenen en afronden zijn opgeslagen.

DRY-afbakening: deze usecase is niet de bron voor oefeninggeneratie, antwoordcontrole, statistiekberekening, autorisatiebeheer door docenten, relatievorming, profielbeheer of PDF-layoutregels buiten de eigen context. Waar die onderwerpen relevant zijn, verwijst de usecase naar de bestaande bronflows en centrale ontwerpbronnen.

3. Scope

Deze usecase omvat wel:

  • wijzigen van periodefilter binnen oefeninggeschiedenis
  • toepassen van filters binnen de geautoriseerde dataset
  • kiezen van paginagrootte
  • navigeren naar vorige, volgende of specifieke pagina
  • tonen van actuele reeks en totaal aantal resultaten
  • herladen van het gefilterde readmodel
  • veilig afhandelen van lege filteruitkomsten
  • veilig afhandelen van pagina's buiten bereik
  • behouden van server-side autorisatie bij elke filterrequest
  • terugkeren naar de lijst zonder domeinmutatie

Deze usecase omvat niet:

  • initieel openen van de geschiedenispagina
  • resultaatdetail openen
  • PDF exporteren
  • wijzigen van exercise-runbrondata
  • aanmaken van gebruikersvoorkeuren voor filters
  • docent- of ouderfilters
  • zoeken over alle geschiedenis wanneer de usecase oefeninggebonden is
  • verwijderen van geschiedenis
  • toegang verlenen tot andere niveaus
  • herberekenen van statistieken

4. Pre-condities

IDVoorwaarde
PRE-001De gebruiker is ingelogd als leerling.
PRE-002De server-side sessiecontext bevat een geldig intern Users.Id.
PRE-003De leerlingcontext is geldig en niet geblokkeerd door account- of routeguardafhandeling.
PRE-004De relevante run-, oefening-, categorie- of niveaugegevens bestaan of kunnen veilig als leeg resultaat worden afgehandeld.
PRE-005De backend kan de benodigde autorisatiecontrole uitvoeren op basis van de huidige gebruiker en historische runcontext.
PRE-006De betreffende feature voor geschiedenis/resultaatweergave is beschikbaar binnen de applicatie.
PRE-007De frontendroute is een geldige leerlingroute of wordt door routeguard geblokkeerd.
PRE-008Er is geen client-side identifier die zonder server-side validatie als autorisatiebron wordt gebruikt.

5. Post-condities

IDResultaat
POST-001De leerling krijgt uitsluitend geautoriseerde resultaat- of geschiedenisgegevens te zien.
POST-002De weergegeven dataset is server-side gefilterd op de ingelogde leerling en de toegestane context.
POST-003Er ontstaan geen nieuwe relaties, rollen, meldingen, privéberichten of systeemnotificaties.
POST-004Niet-toegankelijke of ontbrekende gegevens worden veilig geblokkeerd of als lege staat getoond.
POST-005Zoeken, filteren, openen of bekijken wijzigt geen brondata van de exercise run.
POST-006Navigatie naar resultaat, oefening of PDF verloopt via vervolgusecases.
POST-007De schermweergave gebruikt functioneel begrijpelijke labels en geen technische GUID's als primaire herkenning.
POST-008De zichtbare gegevens blijven consistent met de opgeslagen historische runcontext.

6. Trigger

De usecase start wanneer de leerling op de oefeninggeschiedenispagina een periodefilter, paginagrootte of paginanavigatie kiest.

7. Normale processtroom

StapActorScherm / componentActieSysteemresponsData / regel
1LeerlingFilterregelKiest een periodefilter.Frontend markeert de filterkeuze als actief.Afgelopen week, huidige maand, vorige maand, huidige jaar of alles.
2OefenHub frontendGeschiedenisrouteStuurt filterparameter naar backend.Backend start opnieuw autorisatie en query.Filter is queryparameter.
3OefenHub backendRouteguardControleert sessie en leerlingcontext.Alleen geldige leerlingcontext gaat door.Server-side.
4OefenHub backendGeschiedenisserviceHerstelt de basale oefeningcontext.Filter wordt toegepast binnen dezelfde context.ExerciseId, CategoryId, LevelId.
5OefenHub backendAutorisatieserviceControleert opnieuw inzagerecht.Clientfilter kan geen toegang uitbreiden.DRY met UC-LLN-HIS-001.
6OefenHub backendQuerybuilderPast periodefilter toe.Alleen runs binnen gekozen periode blijven over.CompletedAtUtc.
7OefenHub backendQuerybuilderPast vaste uitsluitingen toe.Niet-afgeronde runs en testruns blijven uitgesloten.Runstatus.
8OefenHub backendPagineringBerekent totaal aantal gefilterde resultaten.Frontend kan reeks tonen.Count query.
9OefenHub backendPagineringBepaalt geldige pagina-index.Pagina buiten bereik wordt gecorrigeerd of leeg getoond.Bounds check.
10OefenHub backendPagineringPast paginagrootte toe.Alleen gevraagde pagina wordt opgehaald.20, 40, 60 of Alles waar toegestaan.
11OefenHub backendGeschiedenisserviceLaadt uniforme runvelden voor de pagina.Tabelregels worden voorbereid.Geen herberekening.
12OefenHub backendAPI responseStuurt gefilterd readmodel terug.Frontend ontvangt regels, totaal en paginering.Readmodel.
13OefenHub frontendFilterregelToont actieve filter als actief en niet-klikbaar.Leerling ziet gekozen filter.UI-gedrag.
14OefenHub frontendGeschiedenistabelVervers de zichtbare regels.Lijst sluit aan op gekozen filter.Geen bronmutatie.
15OefenHub frontendPagineringToont actuele reeks.Bijvoorbeeld 1-20 van 43.Afgeleid totaal.
16LeerlingPagineringKiest volgende pagina.Frontend vraagt volgende pagina op.Pagina-index.
17OefenHub backendPagineringHerhaalt autorisatie en query voor pagina.Dataset blijft begrensd.Server-side.
18OefenHub frontendGeschiedenistabelToont nieuwe pagina.Leerling ziet volgende reeks.Geen mutatie.
19LeerlingPaginagrootteKiest andere paginagrootte.Frontend reset of corrigeert pagina-index.Paginagrootte.
20OefenHub backendPagineringPast nieuwe paginagrootte toe.Nieuwe pagina-indeling wordt geleverd.Querylimiet.
21OefenHub frontendLeegstaatToont lege filterstaat wanneer geen resultaten bestaan.Geen foutmelding nodig.Normale toestand.
22LeerlingGeschiedenisoverzichtBekijkt de gefilterde lijst.Er wordt niets opgeslagen in domeinbronnen.Read-only.
23OefenHub backendResultaat-/geschiedenisserviceVoert aanvullende consistentiecontrole 23 uit.Alleen bruikbare gegevens gaan door naar de frontend.Server-side afleiding.
24OefenHub backendResultaat-/geschiedenisserviceVoert aanvullende consistentiecontrole 24 uit.Alleen bruikbare gegevens gaan door naar de frontend.Server-side afleiding.

8. Alternatieve en exceptionele processtromen

IDVanaf stapSituatieSysteemgedragPopup / meldingDatamutatie
ALT-0012Onbekende filterwaardeBackend negeert of weigert de waarde en gebruikt een veilige default.Niet van toepassingGeen
ALT-0025Autorisatie vervallen tijdens filterenBackend levert geen dataset meer terug.Niet van toepassingGeen
ALT-0036Filter levert geen resultaten opFrontend toont lege staat binnen dezelfde geschiedeniscontext.Niet van toepassingGeen
ALT-0049Pagina-index buiten bereikBackend corrigeert naar een geldige pagina of levert lege pagina met totaal.Niet van toepassingGeen
ALT-00510Paginagrootte Alles bij zeer grote datasetSysteem mag limiet of waarschuwing toepassen volgens centrale performanceregels.Niet van toepassingGeen
ALT-00610Ongeldige paginagrootteBackend valt terug op standaardwaarde.Niet van toepassingGeen
ALT-00711Sortering ontbreektBackend gebruikt standaard sortering aflopend op afrondmoment.Niet van toepassingGeen
ALT-00812Gelijktijdige datasetwijziging door technische opschoningTotaal en pagina worden opnieuw berekend zonder fout voor de leerling.Niet van toepassingGeen
ALT-00917Browser terugknop toont oude filterstandFrontend herlaadt of valideert de stand opnieuw via backend.Niet van toepassingGeen
ALT-01021Leegstaat na paginawisselFrontend toont lege staat en blijft binnen veilige context.Niet van toepassingGeen

9. Business rules

IDRegel
BR-001Geschiedenis toont alleen exercise runs waarvoor de ingelogde leerling server-side inzagerecht heeft.
BR-002Afgeronde leerlingruns blijven zichtbaar in geschiedenis, ook wanneer actuele oefening- of niveauautorisatie later wijzigt.
BR-003Niet-afgeronde runs verschijnen niet als afgeronde geschiedenisregel.
BR-004Docent-testruns worden niet als permanente leerlinggeschiedenis getoond.
BR-005Uniforme totalen en statistieken worden gelezen uit opgeslagen runvelden en niet telkens opnieuw uit de modulepayload berekend.
BR-006Technische identifiers zoals GUID's worden niet als herkenningsmiddel aan de leerling getoond.
BR-007Zoeken, filteren en pagineren wijzigen geen domeindata.
BR-008Een resultaatdetail mag alleen worden geopend voor een run die binnen de geautoriseerde leerlingcontext valt.
BR-009Historische niveau-, categorie- en oefeningcontext blijft leidend voor geschiedenisweergave.
BR-010PDF-download gebruikt dezelfde historisch opgeslagen runcontext als de resultaatweergave.
BR-011UC-LLN-HIS-002 gebruikt bestaande resultaat- en geschiedenisbronnen en maakt geen alternatieve bron van waarheid aan.
BR-012Wanneer actuele toegang is vervallen, blijft eerder afgeronde geschiedenis alleen zichtbaar voor zover historie volgens de bestaande regels bewaard mag blijven.
BR-013Browsergeschiedenis, URL-manipulatie en clientcache geven geen recht op extra resultaten of geschiedenis.
BR-014De frontend mag de dataset niet uitbreiden buiten de door backend geleverde geautoriseerde selectie.

10. Datavalidatie

Veld / objectValidatie
PeriodefilterAlleen ondersteunde filterwaarden worden geaccepteerd.
PaginagrootteAlleen toegestane paginagroottes of Alles volgens centrale regels zijn geldig.
Pagina-indexNegatieve of niet-numerieke pagina-indexen worden geweigerd of gecorrigeerd.
OefeningcontextDe filterquery blijft altijd gekoppeld aan dezelfde geautoriseerde oefeningcontext.
LeerlingcontextDe backend bepaalt de leerling vanuit sessiecontext.
AfrondmomentPeriodefilters gebruiken het opgeslagen afrondmoment van de run.
TestrunsTestruns blijven uitgesloten bij elk filter.
Niet-afgeronde runsNiet-afgeronde runs blijven uitgesloten bij elk filter.
TotaalTotaal aantal resultaten wordt afgeleid uit dezelfde gefilterde query.
ClientstateClientstate mag alleen queryparameters voorstellen en is geen autorisatiebron.

11. Datamutaties en events

StapTypeEntiteit / gegevensbronMutatie
1PresentatieFilterkeuzeDe leerling kiest een filterwaarde binnen de bestaande dataset.
2ReadFilterparametersDe backend ontvangt en valideert filter- en pagineringsparameters.
6ReadExerciseRunsDe gefilterde lijst van afgeronde eigen runs wordt gelezen.
8ReadmodelResultaattellingHet aantal gefilterde resultaten wordt afgeleid.
10ReadmodelResultaatpaginaDe gevraagde pagina met resultaten wordt opgebouwd.
21PresentatieLeegstaatEen lege filteruitkomst wordt getoond zonder domeinmutatie.

Filteren en pagineren zijn readmodelgedrag. Er worden geen functionele domeinevents geregistreerd en er wordt geen blijvende filtervoorkeur opgeslagen.

12. Geen datamutaties

EntiteitReden
ExerciseRunsFilteren leest bestaande runs en wijzigt deze niet.
UserSettingsFilterkeuze wordt in deze usecase niet als blijvende voorkeur opgeslagen.
ExerciseRunProgressVraagvoortgang wordt niet gewijzigd.
SystemMessagesFilteren veroorzaakt geen bericht.
TicketsFilteren veroorzaakt geen melding.
UserRelationshipsRelaties worden niet gewijzigd.
TeacherStudentLevelAccessAutorisaties worden niet gewijzigd.
PDF-bestandEr wordt geen PDF aangemaakt.
PrivateMessageThreadsEr wordt geen privébericht aangemaakt.
FrontendcacheTijdelijke frontendcache is geen domeinbron.

13. State diagram

Niet van toepassing als zelfstandig statusmodel. Deze usecase wijzigt geen persistent statusobject. De zichtbaarheid van geschiedenis en resultaten wordt afgeleid uit bestaande runvelden, accountcontext, autorisatiecontext en historische data.

14. Decision flow

15. Data lifecycle diagram

16. Sequence diagrammen

16.1 Hoofdroute

17. Popupverwijzingen

PopupKeyMomentDoel
Niet van toepassingFilteren en paginerenOngeldige of lege filteruitkomsten worden in de pagina afgehandeld.

18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification

DoeldocumentAfleiding
Functioneel OntwerpFunctioneel Ontwerp beschrijft geschiedenis, filters, resultaatdetail, statistieken, opnieuw maken en PDF-download vanuit leerlingcontext.
Technisch OntwerpTechnisch Ontwerp: oefenruns en resultaten, PDF-export, readmodels en tellers, frontend-resultaatweergave en privacy/retentie beschrijft de technische afbakening, server-side brondata, autorisatie en UI-compositie voor deze usecase.
Software Requirements SpecificationSoftware Requirements Specification bevat centrale eisen en acceptatiecriteria voor resultaten, geschiedenis, statistieken, PDF-export en autorisatie op historische data.
Database-informatieDatabase-informatie blijft bron voor runresultaten, voortgangsrecords, snapshots en exportbrondata; normale PDF-downloads introduceren geen permanente PDF-tabel.
OntwerpbronnenOntwerpbronnen bevatten aanvullende businessregels voor resultaatweergave, geschiedenis, statistieken en exportrepresentatie.

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-afleidingDektUsecasecontext
REQ-UC-LLN-HIS-002-001SRS-RDM-001
SRS-RDM-006
SRS-LRN-010
SRS-NFR-AUD-001
AC-RDM-001
AC-RDM-006
AC-LRN-010
AC-NFR-AUD-001
Geschiedenis kunnen filteren op ondersteunde periodefilters
REQ-UC-LLN-HIS-002-002SRS-AUTH-001
SRS-RDM-001
SRS-LRN-009
AC-AUTH-001
AC-RDM-001
AC-LRN-009
Filteren altijd server-side binnen de geautoriseerde dataset uitvoeren
REQ-UC-LLN-HIS-002-003SRS-RDM-001
SRS-RDM-009
SRS-LRN-009
SRS-NFR-SEC-001
AC-RDM-001
AC-RDM-009
AC-LRN-009
AC-NFR-SEC-001
Ongeldige filterwaarden veilig afhandelen
REQ-UC-LLN-HIS-002-004SRS-RDM-001
SRS-RDM-006
SRS-LRN-010
SRS-NFR-AUD-001
SRS-NFR-PER-001
AC-RDM-001
AC-RDM-006
AC-LRN-010
AC-NFR-AUD-001
AC-NFR-PER-001
Paginering ondersteunen voor geschiedenisresultaten
REQ-UC-LLN-HIS-002-005SRS-RDM-001
SRS-RDM-002
SRS-LRN-009
AC-RDM-001
AC-RDM-002
AC-LRN-009
De actuele reeks en het totaal aantal gefilterde resultaten kunnen tonen
REQ-UC-LLN-HIS-002-006SRS-RDM-001
SRS-LRN-009
AC-RDM-001
AC-LRN-009
Lege filteruitkomsten als normale lege staat tonen
REQ-UC-LLN-HIS-002-007SRS-AUTH-001
SRS-RDM-001
SRS-RDM-005
SRS-LRN-009
AC-AUTH-001
AC-RDM-001
AC-RDM-005
AC-LRN-009
Filteren en pagineren niet gebruiken om de autorisatiecontext uit te breiden
REQ-UC-LLN-HIS-002-008SRS-RDM-001
SRS-RDM-006
SRS-LRN-008
AC-RDM-001
AC-RDM-006
AC-LRN-008
Niet-afgeronde runs en testruns bij elk filter uitgesloten houden
REQ-UC-LLN-HIS-002-009SRS-AUTH-001
SRS-RDM-001
SRS-RDM-009
SRS-LRN-009
SRS-NFR-SEC-001
AC-AUTH-001
AC-RDM-001
AC-RDM-009
AC-LRN-009
AC-NFR-SEC-001
Pagina's buiten bereik veilig corrigeren of blokkeren
REQ-UC-LLN-HIS-002-010SRS-RDM-001
SRS-RDM-006
SRS-LRN-009
AC-RDM-001
AC-RDM-006
AC-LRN-009
Bij filteren en pagineren geen exercise-rundata wijzigen