UC-LLN-DEL-006 — Delen blokkeren zonder actieve vrienden
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-LLN-DEL-006 |
| Naam | Delen blokkeren zonder actieve vrienden |
| Domein | Leerling |
| Subdomein | Gedeelde oefeningen |
| Primaire actor | Leerling |
| Secundaire actor(en) | OefenHub frontend, OefenHub backend, autorisatielaag, relatielaag, featurelaag |
| Rolcontext | Ingelogde gebruiker met actieve leerlingrolcontext die een afgeronde oefening probeert te delen. |
| Betrokken schermen | Resultaatpopup na afronding; resultaatdetail vanuit geschiedenis; deelactie; blokkeerafhandeling. |
| Gerelateerde usecases | UC-LLN-DEL-001; UC-GEN-REL-001; UC-GEN-REL-002; UC-GEN-REL-005; UC-LLN-RES-001; UC-LLN-HIS-003 |
| Primaire entiteiten | Users, UserRelationships, ExerciseRuns |
| Secundaire entiteiten / events | Feature-instellingen, ShareExerciseDenied |
| Gerelateerde popups | POP-LLN-DEL-NO-FRIENDS, POP-LLN-DEL-SHARE-FAILED |
| Popupregister | Centrale bron; deze usecase verwijst uitsluitend naar PopupKey. |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe OefenHub het delen van een oefening blokkeert wanneer delen functioneel niet mogelijk is. Dit kan gebeuren omdat de leerling geen actieve vrienden heeft, omdat vriendschappen voor deze leerling niet beschikbaar zijn, omdat oefeningdelen sitebreed of contextueel is uitgeschakeld, of omdat de bronrun niet deelbaar blijkt.
De usecase maakt geen relatie aan en start geen uitnodigingsflow. Zij toont uitsluitend een veilige blokkeerafhandeling en voorkomt dat een SharedExercises-record of ontvangerrun ontstaat.
3. Scope
3.1 Binnen scope
- Vaststellen dat delen niet mogelijk is door ontbrekende actieve vrienden of uitgeschakelde functionaliteit.
- Blokkeren van de deelactie in de frontend of bij server-side hercontrole.
- Tonen van een passende popup- of inline afhandeling op
PopupKey-niveau. - Voorkomen dat gedeelde records, runs of berichten ontstaan.
3.2 Buiten scope
- Vriend uitnodigen, accepteren, afwijzen of ontkoppelen.
- Beheer van featuretoggles.
- Succesvol delen met een vriend.
- Starten, opnieuw maken of verwijderen van ontvangen gedeelde oefeningen.
- Reguliere resultaatweergave of geschiedenis.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is ingelogd met een actieve leerlingrolcontext. |
| PRE-002 | De leerling bevindt zich in een resultaat- of resultaatdetailcontext waarin delen normaal relevant kan zijn. |
| PRE-003 | De backend kan featurestatus, bronrun en actieve vriendschappen server-side controleren. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De deelactie is veilig geblokkeerd. |
| POST-002 | Er is geen SharedExercises-record aangemaakt. |
| POST-003 | Er is geen ontvangerrun aangemaakt. |
| POST-004 | Er is geen vriendschap, uitnodiging of relatieverzoek aangemaakt. |
| POST-005 | De bronrun van de leerling blijft ongewijzigd. |
| POST-006 | De leerling krijgt een begrijpelijke blokkeerafhandeling zonder dat popupteksten in de usecase worden gedupliceerd. |
6. Trigger
De leerling probeert een oefening te delen, of de resultaatweergave bepaalt dat de deelactie niet beschikbaar mag worden gemaakt.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Leerling | Resultaatweergave | Opent resultaat of kiest delen. | Frontend vraagt deelbaarheid op. | PRE-002. |
| 2 | Backend | Autorisatielaag | Controleert leerlingrol en actieve sessie. | Ongeldige context wordt geblokkeerd. | BR-001. |
| 3 | Backend | Oefenrunlaag | Controleert bronrun. | Alleen afgeronde eigen runs zijn kandidaat. | BR-002. |
| 4 | Backend | Featurelaag | Controleert deelfeature en vriendschapsfeature. | Uitgeschakelde feature blokkeert delen. | BR-003. |
| 5 | Backend | Relatielaag | Controleert actieve vrienden. | Geen actieve vrienden blokkeert delen. | BR-004. |
| 6 | Backend | Frontend | Geeft blokkeerrespons terug. | Frontend toont disabled deelactie of popupafhandeling. | POST-001. |
| 7 | Frontend | Resultaatweergave | Toont de blokkade. | Leerling kan geen ontvanger kiezen. | POST-002 t/m POST-005. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Gebruiker is geen leerling. | Delen wordt geblokkeerd. | Generieke toegangafhandeling. | Geen. |
| ALT-002 | 3 | Bronrun is niet afgerond, niet eigen of een testrun. | Delen wordt geweigerd. | POP-LLN-DEL-SHARE-FAILED. | Geen. |
| ALT-003 | 4 | Oefeningdelen staat uit. | Deelactie wordt niet getoond of wordt geblokkeerd. | POP-LLN-DEL-SHARE-FAILED. | Geen. |
| ALT-004 | 4 | Vriendschappen zijn voor de leerling niet toegestaan. | Delen wordt geblokkeerd. | POP-LLN-DEL-NO-FRIENDS. | Geen. |
| ALT-005 | 5 | Er zijn geen actieve vrienden. | Delen wordt geblokkeerd. | POP-LLN-DEL-NO-FRIENDS. | Geen. |
| ALT-006 | 5 | Alle vrienden zijn gedeactiveerd, geanonimiseerd of niet langer leerling. | Delen wordt geblokkeerd. | POP-LLN-DEL-NO-FRIENDS. | Geen. |
| ALT-007 | 6 | Frontend toonde per ongeluk een deelactie door verouderde clientstate. | Backend weigert definitief delen. | POP-LLN-DEL-SHARE-FAILED. | Geen. |
| ALT-008 | 6 | Controle op deelbaarheid faalt technisch. | Systeem toont veilige foutafhandeling. | POP-LLN-DEL-SHARE-FAILED. | Geen domeinmutatie. |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Alleen een actieve leerlingrolcontext mag oefeningdelen starten. |
| BR-002 | Alleen een afgeronde eigen leerlingrun kan kandidaat zijn voor delen. |
| BR-003 | Oefeningdelen en vriendschappen moeten server-side functioneel beschikbaar zijn. |
| BR-004 | Delen vereist minimaal één actieve vriend die een actief leerlingaccount heeft. |
| BR-005 | Verouderde frontendstate mag delen niet alsnog toestaan. |
| BR-006 | Blokkeren van delen maakt geen relatie, uitnodiging, gedeeld record, ontvangerrun of bericht aan. |
| BR-007 | De blokkeerflow verwijst niet bronhoudend naar relatiebeheer; relatievorming blijft in het relatiedomein. |
| BR-008 | De bronrun van de leerling blijft ongewijzigd. |
| BR-009 | De gebruiker krijgt geen technische details over gedeactiveerde of niet-toegankelijke andere accounts. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Sessiecontext | Bevat actief intern Users.Id en actieve leerlingrol. |
SourceExerciseRunId | Bestaat; hoort bij de leerling; is afgerond; is geen testrun. |
| Deelfeature | Moet server-side actief zijn. |
| Vriendschapsfeature | Moet server-side actief of toegestaan zijn voor deze leerling. |
| Actieve vrienden | Minimaal één actieve Friendship met een actief leerlingaccount. |
| Clientstate | Mag nooit bepalend zijn voor definitieve deelbaarheid. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| ALT-002 t/m ALT-008 | Logging | Applicatielog / ShareExerciseDenied | Weigering mag technisch herleidbaar worden gelogd zonder gedeelde-oefeningenrecord aan te maken. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
SharedExercises | Er wordt geen gedeelde oefening aangemaakt. |
ExerciseRuns van ontvanger | Er ontstaat geen ontvangerrun. |
| Bronrun van deler | Blijft ongewijzigd. |
UserRelationships | Er wordt geen vriendschap gemaakt of gewijzigd. |
RelationshipInvitations | Er wordt geen uitnodiging gestart. |
SystemMessages | Er wordt geen systeemcommunicatie voor een ontvanger aangemaakt. |
UserSettings | Voorkeuren worden niet gewijzigd. |
13. State diagram
Niet van toepassing als zelfstandig statusmodel. De usecase blokkeert een actie en verandert geen persistente gedeelde-oefeningenstatus.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Delen blokkeren zonder actieve vrienden
16.2 Verouderde frontendstate wordt server-side geweigerd
17. Popupverwijzingen
| PopupKey | Moment | Toepassing |
|---|---|---|
POP-LLN-DEL-NO-FRIENDS | Geen actieve vrienden of vriendschappen niet beschikbaar. | Legt uit dat delen niet kan zonder actieve vrienden. |
POP-LLN-DEL-SHARE-FAILED | Delen wordt geweigerd door bronrun-, feature- of autorisatiecontrole. | Veilige foutafhandeling zonder technische details. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Gedeelde oefeningen beschrijft wanneer de deelactie zichtbaar, disabled of geblokkeerd is. |
| Technisch Ontwerp | Autorisatie, policies en server-side contextcontrole beschrijft server-side blokkade, queryscoping en veilige afwijzing. |
| Technisch Ontwerp | Relatiebeheer, uitnodigingen en gedeelde oefeningen beschrijft actieve vriendschapscontrole als voorwaarde voor delen. |
| Technisch Ontwerp | Performance, beschikbaarheid en fallbackgedrag beschrijft veilige degradatie zonder datalekken of misleidende states. |
| Software Requirements Specification | Borgt de centrale requirements voor blokkades zonder mutaties, veilige foutafhandeling 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-006-001 | SRS-AUTH-001 SRS-LRN-009 SRS-SHR-001 AC-AUTH-001 AC-LRN-009 AC-SHR-001 | Delen blokkeren wanneer de gebruiker geen actieve leerlingcontext heeft |
REQ-UC-LLN-DEL-006-002 | SRS-AUTH-001 SRS-LRN-009 SRS-SHR-003 AC-AUTH-001 AC-LRN-009 AC-SHR-003 | Delen blokkeren wanneer de bronrun niet eigen, niet afgerond of een testrun is |
REQ-UC-LLN-DEL-006-003 | SRS-AUTH-001 SRS-REL-001 SRS-LRN-009 SRS-SHR-001 AC-AUTH-001 AC-REL-001 AC-LRN-009 AC-SHR-001 | Delen blokkeren wanneer oefeningdelen of vriendschappen functioneel niet beschikbaar zijn |
REQ-UC-LLN-DEL-006-004 | SRS-AUTH-001 SRS-REL-001 SRS-LRN-009 SRS-SHR-001 AC-AUTH-001 AC-REL-001 AC-LRN-009 AC-SHR-001 | Delen blokkeren wanneer de leerling geen actieve vrienden heeft |
REQ-UC-LLN-DEL-006-005 | SRS-REL-001 SRS-LRN-009 SRS-SHR-001 AC-REL-001 AC-LRN-009 AC-SHR-001 | Bij blokkade geen gedeelde oefening, ontvangerrun, relatie, uitnodiging of systeemcommunicatie aanmaken |
REQ-UC-LLN-DEL-006-006 | SRS-AUTH-001 SRS-LRN-009 SRS-SHR-001 SRS-GUA-001 AC-AUTH-001 AC-LRN-009 AC-SHR-001 AC-GUA-001 | Verouderde frontendstate bij definitief delen server-side hercontroleren |
REQ-UC-LLN-DEL-006-007 | SRS-LRN-009 SRS-SHR-001 SRS-POP-001 AC-LRN-009 AC-SHR-001 AC-POP-001 | Blokkades tonen via centrale popupkeys of inline afhandeling zonder popuptekstduplicatie |
REQ-UC-LLN-DEL-006-008 | SRS-ACC-002 SRS-LRN-009 SRS-SHR-001 AC-ACC-002 AC-LRN-009 AC-SHR-001 | Blokkades afhandelen zonder informatie over andere accounts te lekken |