UC-LLN-DEL-004 — Gedeelde oefening opnieuw maken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-DEL-004 |
| Naam | Gedeelde oefening opnieuw maken |
| Domein | Leerling |
| Subdomein | Gedeelde oefeningen |
| Primaire actor | Leerling |
| Secundaire actor(en) | OefenHub frontend, OefenHub backend, autorisatielaag, database, modulelaag |
| Rolcontext | Ingelogde gebruiker met actieve leerlingrolcontext die ontvanger is van de gedeelde oefening. |
| Betrokken schermen | Ontvangen gedeelde oefeningen; resultaatdetail van gedeelde run; oefenscherm. |
| Gerelateerde usecases | UC-LLN-DEL-002; UC-LLN-DEL-003; UC-LLN-OEF-003; UC-LLN-OEF-008; UC-LLN-HIS-003 |
| Primaire entiteiten | SharedExercises, ExerciseRuns, ExerciseRunProgress, Users |
| Secundaire entiteiten / events | Bronrunpayload, eerdere ontvangerruns, SharedExerciseRepeated |
| Gerelateerde popups | POP-LLN-DEL-SHARED-REPEAT-NOT-AVAILABLE, POP-LLN-DEL-SHARED-REPEAT-ERROR |
| Popupregister | Centrale bron; deze usecase verwijst uitsluitend naar PopupKey. |
| MoSCoW | Should |
2. Omschrijving
Deze usecase beschrijft hoe een leerling een eerder ontvangen gedeelde oefening opnieuw maakt. Opnieuw maken gebruikt dezelfde gedeelde oefeninhoud als het ontvangen record. Er ontstaat altijd een nieuwe zelfstandige ExerciseRun voor de ontvanger; eerdere ontvangerruns en resultaten blijven ongewijzigd.
Na de eerste uitvoering hoeft de vraagvolgorde niet verplicht gelijk te blijven aan de oorspronkelijke bronvolgorde. Wanneer de module of oefenconfiguratie herordening toestaat, mag OefenHub voor een herhaling een nieuwe volgorde vastleggen. De inhoud blijft afkomstig uit de gedeelde broncontext.
3. Scope
3.1 Binnen scope
- Controleren dat de ingelogde leerling de ontvanger is van het gedeelde record.
- Controleren dat het ontvangen item opnieuw gemaakt mag worden.
- Lezen van gedeelde broninhoud en eerdere ontvangerruns.
- Aanmaken van een nieuwe zelfstandige ontvangerrun.
- Vastleggen van vraaginhoud, volgorde en voortgang voor deze nieuwe run.
- Openen van het oefenscherm voor de nieuwe run.
3.2 Buiten scope
- Eerste start van een gedeelde oefening.
- Regulier opnieuw maken van een eigen niet-gedeelde oefening.
- Vraagbeantwoording en afronding.
- Resultaatdetail, geschiedenis en PDF-export.
- Wijzigen van de gedeelde bronrun of het gedeelde record door de afzender.
- Herstellen van een uit het overzicht verwijderd item.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is ingelogd met een actieve leerlingrolcontext. |
| PRE-002 | Het gedeelde record bestaat en is gericht aan de ingelogde leerling. |
| PRE-003 | Het gedeelde record is niet door de ontvanger uit het overzicht verwijderd voor deze reguliere route. |
| PRE-004 | Er bestaat minimaal één eerdere ontvangerrun of het item is volgens de UI herhaalbaar. |
| PRE-005 | De gedeelde broninhoud is beschikbaar en veilig renderbaar. |
| PRE-006 | Het systeem kan een nieuwe zelfstandige run voor de ontvanger aanmaken. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Bij succes is een nieuwe zelfstandige ontvangerrun aangemaakt. |
| POST-002 | De nieuwe run is herleidbaar gekoppeld aan het gedeelde record. |
| POST-003 | Eerdere ontvangerruns en resultaten blijven ongewijzigd. |
| POST-004 | De bronrun van de afzender blijft ongewijzigd. |
| POST-005 | De leerling wordt naar het oefenscherm voor de nieuwe run geleid. |
| POST-006 | Bij foutafhandeling ontstaat geen half bruikbare run. |
6. Trigger
De leerling kiest Opnieuw maken bij een ontvangen gedeelde oefening of bij een resultaatdetail van een eerder gemaakte gedeelde oefening.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Leerling | Overzicht of resultaatdetail | Kiest Opnieuw maken. | Frontend stuurt herhaalverzoek. | PRE-001. |
| 2 | Backend | Autorisatielaag | Controleert sessie en leerlingrol. | Alleen ontvanger mag opnieuw maken. | BR-001. |
| 3 | Backend | Database | Laadt gedeeld record en eerdere ontvangerruns. | Record moet aan ontvanger gekoppeld zijn. | PRE-002. |
| 4 | Backend | Database | Controleert zichtbaarheid en herhaalbaarheid. | Ongeldige route wordt geblokkeerd. | PRE-003, PRE-004. |
| 5 | Backend | Modulelaag | Leest gedeelde broninhoud. | Inhoud is bruikbaar voor nieuwe run. | PRE-005. |
| 6 | Backend | Backend | Bepaalt vraagvolgorde voor herhaling. | Inhoud blijft gelijk; volgorde volgt module- of domeinregel. | BR-004. |
| 7 | Backend | Database | Start transactie. | Nieuwe run en voortgang worden samen verwerkt. | Alles of niets. |
| 8 | Backend | Database | Maakt nieuwe ontvangerrun aan. | Eerdere runs blijven bestaan. | POST-001, POST-003. |
| 9 | Backend | Database | Initialiseert voortgang en vraagvolgorde. | Nieuwe run is startklaar. | POST-002. |
| 10 | Frontend | Oefenscherm | Opent nieuwe run. | Leerling kan beginnen. | POST-005. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Gebruiker is geen leerling. | Backend weigert toegang. | Generieke toegangafhandeling. | Geen. |
| ALT-002 | 3 | Gedeeld record bestaat niet of hoort niet bij de leerling. | Backend blokkeert zonder data te lekken. | POP-LLN-DEL-SHARED-REPEAT-NOT-AVAILABLE. | Geen. |
| ALT-003 | 4 | Item is door ontvanger uit overzicht verwijderd. | Reguliere herhaalroute wordt geblokkeerd. | POP-LLN-DEL-SHARED-REPEAT-NOT-AVAILABLE. | Geen. |
| ALT-004 | 4 | Item is nog nooit gestart en de gekozen actie hoort bij eerste start. | Systeem verwijst naar de startflow. | Inline afhandeling. | Geen. |
| ALT-005 | 5 | Bronpayload of renderrepresentatie ontbreekt. | Opnieuw maken wordt geweigerd. | POP-LLN-DEL-SHARED-REPEAT-NOT-AVAILABLE. | Geen. |
| ALT-006 | 8 | Runaanmaak faalt. | Transactie rolt terug. | POP-LLN-DEL-SHARED-REPEAT-ERROR. | Geen half bruikbare run. |
| ALT-007 | 10 | Navigatie naar oefenscherm faalt na succesvolle runaanmaak. | Run blijft beschikbaar om te hervatten. | Generieke foutafhandeling. | Run blijft consistent. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Alleen de bedoelde ontvanger mag een ontvangen gedeelde oefening opnieuw maken. |
| BR-002 | Opnieuw maken creëert altijd een nieuwe zelfstandige ExerciseRun. |
| BR-003 | Eerdere ontvangerruns worden niet overschreven of verwijderd. |
| BR-004 | De gedeelde inhoud blijft gelijk aan de broncontext; de vraagvolgorde mag opnieuw worden bepaald wanneer toegestaan. |
| BR-005 | De bronrun van de afzender wordt niet aangepast. |
| BR-006 | Opnieuw maken geeft geen bredere toegang tot niveau, categorie of docentcontext van de deler. |
| BR-007 | Een fout tijdens runaanmaak mag geen half bruikbare run achterlaten. |
| BR-008 | Actuele oefeningconfiguratie mag historische gedeelde inhoud niet stilzwijgend vervangen. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Sessiecontext | Bevat actief intern Users.Id en actieve leerlingrol. |
SharedExerciseId | Bestaat en is gekoppeld aan de ingelogde leerling als ontvanger. |
| Verwijdermarkering | Mag niet gezet zijn voor de reguliere herhaalroute. |
| Eerdere ontvangerrun | Wordt gebruikt om herhaalcontext te bepalen, maar wordt niet gewijzigd. |
| Bronrunpayload | Moet beschikbaar, veilig decodeerbaar en renderbaar zijn. |
| Vraagvolgorde | Wordt server-side bepaald en vastgelegd op de nieuwe run. |
| Actor | Wordt server-side uit sessie bepaald. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 7 | Transactie | Database | Start transactionele verwerking van de herhaalactie. |
| 8 | Insert | ExerciseRuns | Maakt nieuwe zelfstandige ontvangerrun aan. |
| 9 | Insert/initialisatie | ExerciseRunProgress / runpayload | Initialiseert vraaginhoud, vraagvolgorde en voortgang. |
| 9 | Event | SharedExerciseRepeated | Registreert dat de ontvanger een gedeelde oefening opnieuw maakt. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| Eerdere ontvangerruns | Blijven historisch intact. |
| Bronrun van afzender | Blijft ongewijzigd. |
SharedExercises | Wordt gelezen als broncontext; het record hoeft niet te wijzigen voor iedere herhaling. |
UserRelationships | Herhalen maakt of beëindigt geen vriendschap. |
SystemMessages | Mailboxrecords worden niet aangepast. |
| Actuele oefeningconfiguratie | Vervangt de historische gedeelde inhoud niet. |
13. State diagram
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Gedeelde oefening opnieuw maken
16.2 Herhalen geblokkeerd
17. Popupverwijzingen
| PopupKey | Moment | Toepassing |
|---|---|---|
POP-LLN-DEL-SHARED-REPEAT-NOT-AVAILABLE | Gedeelde oefening kan niet opnieuw gemaakt worden. | Blokkeert herhaling zonder technische details te tonen. |
POP-LLN-DEL-SHARED-REPEAT-ERROR | Fout tijdens aanmaak van de nieuwe run. | Meldt herhaalfout en voorkomt half bruikbare run. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Gedeelde oefeningen beschrijft opnieuw maken vanuit een ontvangen gedeelde oefening. |
| Technisch Ontwerp | Oefenruns, voortgang, resultaten, statistieken en PDF-brondata beschrijft duplicaten, nieuwe runs en relatie met het oorspronkelijke gedeelde item. |
| Technisch Ontwerp | Oefenmodulecontract en dynamische module-integratie beschrijft hergebruik van modulepayloads en compatibiliteit. |
| Technisch Ontwerp | Readmodels, tellers, badges, caching en materialisatie beschrijft actualisatie van overzichten na opnieuw maken. |
| Software Requirements Specification | Borgt de centrale requirements voor opnieuw maken, zelfstandige runhistorie en traceerbare acceptatiecriteria. |
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-DEL-004-001 | SRS-LRN-009 SRS-SHR-006 AC-LRN-009 AC-SHR-006 | Een ontvangen gedeelde oefening opnieuw kunnen laten maken door de bedoelde ontvanger |
REQ-UC-LLN-DEL-004-002 | SRS-LRN-009 SRS-SHR-001 AC-LRN-009 AC-SHR-001 | Voor iedere herhaling een nieuwe zelfstandige ExerciseRun aanmaken |
REQ-UC-LLN-DEL-004-003 | SRS-LRN-009 SRS-SHR-001 AC-LRN-009 AC-SHR-001 | Eerdere ontvangerruns en resultaten niet overschrijven |
REQ-UC-LLN-DEL-004-004 | SRS-LRN-009 SRS-SHR-001 AC-LRN-009 AC-SHR-001 | Dezelfde gedeelde inhoud gebruiken voor herhalingen |
REQ-UC-LLN-DEL-004-005 | SRS-AUTH-001 SRS-LRN-009 SRS-SHR-001 SRS-NFR-AUD-001 AC-AUTH-001 AC-LRN-009 AC-SHR-001 AC-NFR-AUD-001 | De vraagvolgorde voor herhalingen server-side bepalen en vastleggen |
REQ-UC-LLN-DEL-004-006 | SRS-LRN-009 SRS-SHR-003 AC-LRN-009 AC-SHR-003 | De bronrun van de afzender niet wijzigen |
REQ-UC-LLN-DEL-004-007 | SRS-AUTH-001 SRS-LRN-009 SRS-SHR-001 SRS-NFR-SEC-001 AC-AUTH-001 AC-LRN-009 AC-SHR-001 AC-NFR-SEC-001 | Niet-herhaalbare gedeelde oefeningen veilig blokkeren |
REQ-UC-LLN-DEL-004-008 | SRS-LRN-009 SRS-SHR-001 SRS-NFR-AVL-001 AC-LRN-009 AC-SHR-001 AC-NFR-AVL-001 | Mislukte herhaalacties zonder half bruikbare run afhandelen |