Skip to main content

UC-LLN-DEL-001 — Oefening delen met vriend

1. Kerngegevens

VeldWaarde
Usecase-IDUC-LLN-DEL-001
NaamOefening delen met vriend
DomeinLeerling
SubdomeinGedeelde oefeningen
Primaire actorLeerling
Secundaire actor(en)OefenHub frontend, OefenHub backend, autorisatielaag, database, berichtensysteem
RolcontextIngelogde gebruiker met actieve leerlingrolcontext en een afgeronde eigen oefenrun die functioneel deelbaar is.
Betrokken schermenResultaatpopup na afronding; resultaatdetail vanuit geschiedenis; deelactie; vriendselectiecomponent; ontvangen gedeelde oefeningen-overzicht van ontvanger.
Gerelateerde usecasesUC-LLN-RES-001; UC-LLN-HIS-003; UC-LLN-DEL-002; UC-LLN-DEL-003; UC-LLN-DEL-006; UC-GEN-REL-001; UC-GEN-MSG-001
Primaire entiteitenExerciseRuns, SharedExercises, Users, UserRelationships
Secundaire entiteiten / eventsSystemMessages, ExerciseRunProgress, SharedExerciseCreated, SharedExerciseSystemMessageCreated, ShareExerciseDenied
Gerelateerde popupsPOP-LLN-DEL-SHARE-SELECT, POP-LLN-DEL-SHARE-SUCCESS, POP-LLN-DEL-SHARE-FAILED, POP-LLN-DEL-NO-FRIENDS
PopupregisterCentrale bron; deze usecase verwijst uitsluitend naar PopupKey.
MoSCoWMust

2. Omschrijving

Deze usecase beschrijft hoe een leerling een afgeronde eigen oefening deelt met een actieve vriend. Delen betekent dat dezelfde oefeninhoud beschikbaar wordt gemaakt voor de ontvanger. Het behaalde resultaat, de antwoorden en de statistieken van de deler worden niet als resultaat voor de ontvanger gedeeld.

Bij succesvol delen maakt OefenHub een administratief SharedExercises-record aan met de bronrun, deler, ontvanger en historische snapshotgegevens van niveau, categorie en oefening. Voor de ontvanger ontstaat nog geen ExerciseRun. Die ontstaat pas wanneer de ontvanger de gedeelde oefening start of opnieuw maakt.

3. Scope

3.1 Binnen scope

  • Tonen of starten van de deelactie vanuit een afgerond resultaat of resultaatdetail.
  • Server-side controleren dat de bronrun bij de ingelogde leerling hoort en afgerond is.
  • Controleren dat de ontvanger een actieve vriend is en een actief leerlingaccount heeft.
  • Vastleggen van het ontvangen gedeelde-oefeningrecord.
  • Vastleggen van historische snapshotgegevens voor niveau, categorie en oefening.
  • Informeren van de ontvanger via systeemcommunicatie wanneer de centrale berichtlogica dit ondersteunt.

3.2 Buiten scope

  • Vriend uitnodigen, accepteren, afwijzen of ontkoppelen.
  • Reguliere oefening opnieuw maken vanuit het eigen resultaat.
  • Starten of beantwoorden van de gedeelde oefening door de ontvanger.
  • Resultaatweergave, statistieken en PDF-export.
  • Beheer van featuretoggles voor vriendschappen of delen.
  • Delen met ouders, docenten, beheerders of onbekende e-mailadressen.

4. Pre-condities

IDVoorwaarde
PRE-001De gebruiker is ingelogd met een actieve leerlingrolcontext.
PRE-002De interne OefenHub-sessiecontext is server-side geldig opgebouwd.
PRE-003De bronrun bestaat, hoort bij de ingelogde leerling en is afgerond.
PRE-004De bronrun is geen docenttestrun of tijdelijke testrun.
PRE-005De functionaliteit voor vriendschappen en oefeningdelen is server-side beschikbaar.
PRE-006Er bestaat minimaal één actieve vriendrelatie met een actief leerlingaccount.

5. Post-condities

IDResultaat
POST-001Bij succes is een ontvangen gedeelde oefening voor de ontvanger vastgelegd.
POST-002Bij succes is de ontvanger via systeemcommunicatie of het ontvangen overzicht vindbaar gemaakt.
POST-003De bronrun, antwoorden, statistieken en voortgang van de deler blijven ongewijzigd.
POST-004Voor de ontvanger ontstaat nog geen ExerciseRun.
POST-005Bij blokkade of fout ontstaat geen gedeeltelijk gedeeld record.
POST-006Relaties, accounts, profielgegevens en niveauautorisaties worden niet gewijzigd.

6. Trigger

De leerling kiest vanuit een afgerond resultaat of resultaatdetail de actie om de oefening te delen.

7. Normale processtroom

StapActorScherm / componentActieSysteemresponsData / regel
1LeerlingResultaatweergaveKiest de deelactie.Frontend vraagt deelcontext op.Alleen vanuit afgeronde run.
2FrontendDeelcomponentVraagt mogelijke ontvangers op.Backend start server-side controles.Clientstate is niet leidend.
3BackendAutorisatielaagControleert leerlingrol en actief account.Ongeldige context wordt geblokkeerd.PRE-001, PRE-002.
4BackendOefenrunlaagControleert bronrun.Run is eigen, afgerond en deelbaar.PRE-003, PRE-004.
5BackendRelatielaagLaadt actieve vrienden.Alleen actieve leerling-vrienden worden teruggegeven.PRE-006.
6FrontendDeelcomponentToont ontvangers.Leerling kiest één vriend.Geen vrije e-mailinvoer.
7LeerlingDeelcomponentBevestigt delen.Frontend stuurt deelverzoek.Ontvanger-id uit lijst is geen autorisatiebewijs.
8BackendAutorisatielaagHercontroleert bronrun, deler, ontvanger, relatie en features.Race conditions worden afgevangen.PRE-003 t/m PRE-006.
9BackendDatabaseStart transactie.Shared-record wordt voorbereid.Geen ontvangerrun.
10BackendDatabaseLegt SharedExercises vast.Bronrun, deler, ontvanger en snapshots zijn opgeslagen.StartedExerciseRunId blijft leeg.
11BackendBerichtensysteemMaakt systeemcommunicatie voor ontvanger.Ontvanger kan het item ontdekken.Geen privéberichtthread.
12BackendDatabaseCommit transactie.Deelactie is consistent opgeslagen.Alles of niets.
13FrontendResultaatweergaveToont succesafhandeling.Leerling blijft in resultaatcontext.POP-LLN-DEL-SHARE-SUCCESS.

8. Alternatieve en exceptionele processtromen

IDVanaf stapSituatieSysteemgedragPopup / meldingDatamutatie
ALT-0011Deelactie is niet beschikbaar.Frontend toont de actie niet of disabled.Geen popup vereist.Geen.
ALT-0023Gebruiker heeft geen actieve leerlingcontext.Backend weigert de actie.Generieke niet-beschikbaarafhandeling.Geen.
ALT-0034Bronrun is niet afgerond of niet van de leerling.Backend weigert zonder details van andere records vrij te geven.POP-LLN-DEL-SHARE-FAILED.Geen.
ALT-0045Er zijn geen actieve vrienden.Flow gaat naar de blokkeerusecase.POP-LLN-DEL-NO-FRIENDS.Geen.
ALT-0058Feature vriendschappen of delen staat uit.Backend weigert delen.POP-LLN-DEL-SHARE-FAILED.Geen.
ALT-0068Relatie eindigt tussen tonen lijst en bevestigen.Backend hercontroleert en weigert.POP-LLN-DEL-SHARE-FAILED.Geen.
ALT-0078Ontvangeraccount is niet actief.Backend weigert ontvanger.POP-LLN-DEL-SHARE-FAILED.Geen.
ALT-00810Identiek openstaand gedeeld record bestaat al voor dezelfde ontvanger.Backend past de centrale doubleregel toe en voorkomt ongecontroleerde doublures.Informatieve of foutafhandeling via popupkey.Geen nieuw doublerecord.
ALT-00911Systeemcommunicatie faalt binnen de transactie.Transactie wordt teruggedraaid of gecontroleerd afgehandeld volgens de centrale berichtlogica.POP-LLN-DEL-SHARE-FAILED.Geen half gedeeld record.
ALT-01012Databasefout tijdens commit.Transactie rolt terug.POP-LLN-DEL-SHARE-FAILED.Geen persistent shared-record.

9. Business rules

IDRegel
BR-001Alleen een leerling mag een afgeronde eigen leerlingrun delen met een actieve vriend.
BR-002Delen gebruikt de oefeninhoud van de bronrun, niet het behaalde resultaat van de deler.
BR-003Delen vereist een actieve Friendship-relatie op het moment van definitief delen.
BR-004Frontend-zichtbaarheid van de deelknop is geen autorisatiebron.
BR-005De backend controleert featurebeschikbaarheid, accountstatus, relatie en bronrun opnieuw bij definitief delen.
BR-006De ontvanger krijgt pas een ExerciseRun wanneer deze de gedeelde oefening zelf start of opnieuw maakt.
BR-007De bronrun van de deler wordt niet gewijzigd door delen.
BR-008Een ontvangen gedeelde oefening kan niet door de afzender worden teruggetrokken.
BR-009Beëindiging van de vriendschap verwijdert bestaande gedeelde oefeningen niet.
BR-010Snapshotwaarden voor niveau, categorie en oefening blijven historisch ongewijzigd.
BR-011Niet-afgeronde runs, docenttestruns en tijdelijke testruns mogen niet worden gedeeld.
BR-012Delen met ouder/voogd, docent, beheerder of onbekend e-mailadres valt buiten deze flow.
BR-013De deelactie maakt geen privéberichtthread aan.
BR-014Systeemcommunicatie is een ingang voor de ontvanger en geen bron van waarheid voor het gedeelde record.
BR-015Er mag geen half gedeelde oefening ontstaan.
BR-016Een ontvangen gedeelde oefening geeft geen bredere toegang tot het niveau, de categorie of de docentcontext van de deler.

10. Datavalidatie

Veld / objectValidatie
SourceExerciseRunIdVerplicht; bestaat; hoort bij de ingelogde leerling; is afgerond; is geen testrun.
SharedByUserIdWordt server-side uit sessie bepaald.
SharedToUserIdVerplicht bij definitief delen; actief leerlingaccount; actief bevriend met deler.
UserRelationshipsActieve relatie met relatietype Friendship en leerlingrolcontext aan beide kanten.
DeelfeatureServer-side actief voor de leerlingcontext.
VriendschapsfeatureServer-side actief voor de leerlingcontext.
SnapshotveldenWorden server-side bepaald uit de historische runcontext en zijn niet vrij invoerbaar.
OntvangerselectieAlleen keuze uit server-side geleverde vrienden; geen vrije invoer.
SysteemcommunicatieOntvanger heeft een intern Users.Id; verwijstype is centraal ondersteund.

11. Datamutaties en events

StapTypeEntiteit / eventMutatie
9TransactieDatabaseStart transactionele verwerking van de deelactie.
10InsertSharedExercisesMaakt ontvangen gedeelde oefening aan met bronrun, deler, ontvanger en snapshots.
10EventSharedExerciseCreatedRegistreert dat een gedeelde oefening is aangemaakt.
11InsertSystemMessagesMaakt systeemcommunicatie voor de ontvanger wanneer de berichtlogica dit ondersteunt.
11EventSharedExerciseSystemMessageCreatedRegistreert communicatie richting ontvanger.
12TransactieDatabaseCommit of rollback van de complete deelactie.
ALT-004/ALT-006LoggingApplicatielogWeigering wordt technisch herleidbaar gelogd zonder inhoudelijke payloaddetails.

12. Geen datamutaties

EntiteitReden
ExerciseRuns van de delerDe bronrun blijft ongewijzigd.
ExerciseRunProgress van de delerVraagvoortgang wordt niet aangepast door delen.
ExerciseRuns van de ontvangerOntstaat pas bij starten of opnieuw maken.
UserRelationshipsDelen maakt, wijzigt of beëindigt geen vriendschap.
RelationshipInvitationsUitnodigingen zijn geen onderdeel van deze flow.
UserSettingsVoorkeuren worden niet gewijzigd.
TicketsMeldingen worden niet geraakt.
PrivéberichtthreadsDe deelactie maakt geen privéberichtthread aan.

13. State diagram

14. Decision flow

15. Data lifecycle diagram

16. Sequence diagrammen

16.1 Delen met actieve vriend

16.2 Delen geblokkeerd na hercontrole

17. Popupverwijzingen

PopupKeyMomentToepassing
POP-LLN-DEL-SHARE-SELECTLeerling kiest delen.Ontvangerselectie voor actieve vrienden.
POP-LLN-DEL-SHARE-SUCCESSDelen is succesvol verwerkt.Bevestigt dat de oefening is gedeeld.
POP-LLN-DEL-SHARE-FAILEDDelen faalt of wordt geweigerd.Veilige foutafhandeling zonder brondata te lekken.
POP-LLN-DEL-NO-FRIENDSGeen actieve vrienden beschikbaar.Verwijst naar de blokkeerflow zonder relatiebeheer te dupliceren.

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

DoeldocumentAfleiding
Functioneel OntwerpGedeelde oefeningen beschrijft delen met vrienden, zichtbaarheid, blokkades en gebruikersfeedback.
Technisch OntwerpOefenruns, voortgang, resultaten, statistieken en PDF-brondata beschrijft SharedExercises, bronrun-snapshots en het ontstaan van een ontvangerrun.
Technisch OntwerpRelatiebeheer, uitnodigingen en gedeelde oefeningen beschrijft de friendship-check via publieke relationship-contracts.
Technisch OntwerpBerichten, systeemberichten, notificaties en privéthreads beschrijft systeemcommunicatie als vindbare ingang voor de ontvanger.
Software Requirements SpecificationBorgt de centrale requirements voor delen, bronrunbescherming, ontvangerzichtbaarheid, autorisatie 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-afleidingDektUsecasecontext
REQ-UC-LLN-DEL-001-001SRS-REL-001
SRS-LRN-009
SRS-SHR-001
AC-REL-001
AC-LRN-009
AC-SHR-001
Een afgeronde eigen leerlingrun kunnen delen met een actieve vriend
REQ-UC-LLN-DEL-001-002SRS-AUTH-001
SRS-LRN-009
SRS-SHR-003
AC-AUTH-001
AC-LRN-009
AC-SHR-003
Delen blokkeren wanneer de bronrun niet afgerond, niet eigen of een testrun is
REQ-UC-LLN-DEL-001-003SRS-AUTH-001
SRS-ACC-002
SRS-REL-001
SRS-LRN-009
SRS-SHR-001
SRS-POP-003
AC-AUTH-001
AC-ACC-002
AC-REL-001
AC-LRN-009
AC-SHR-001
AC-POP-003
Delen server-side autoriseren op leerlingrol, actieve vriendschap, accountstatus en featurebeschikbaarheid
REQ-UC-LLN-DEL-001-004SRS-LRN-009
SRS-SHR-001
SRS-NFR-AUD-001
AC-LRN-009
AC-SHR-001
AC-NFR-AUD-001
Bij delen een administratief gedeelde-oefeningenrecord vastleggen
REQ-UC-LLN-DEL-001-005SRS-CAT-004
SRS-LRN-009
SRS-SHR-008
SRS-NFR-AUD-001
AC-CAT-004
AC-LRN-009
AC-SHR-008
AC-NFR-AUD-001
Bij delen historische snapshotgegevens voor niveau, categorie en oefening vastleggen
REQ-UC-LLN-DEL-001-006SRS-LRN-009
SRS-SHR-001
AC-LRN-009
AC-SHR-001
Bij delen geen ontvangerrun aanmaken
REQ-UC-LLN-DEL-001-007SRS-LRN-003
SRS-SHR-003
AC-LRN-003
AC-SHR-003
De bronrun, antwoorden, statistieken en voortgang van de deler niet wijzigen
REQ-UC-LLN-DEL-001-008SRS-LRN-009
SRS-SHR-001
AC-LRN-009
AC-SHR-001
De ontvanger kunnen informeren via centrale systeemcommunicatie
REQ-UC-LLN-DEL-001-009SRS-LRN-009
SRS-SHR-001
SRS-NFR-AVL-001
AC-LRN-009
AC-SHR-001
AC-NFR-AVL-001
Voorkomen dat een mislukte deelactie een half gedeeld record achterlaat
REQ-UC-LLN-DEL-001-010SRS-REL-003
SRS-REL-006
SRS-LRN-009
SRS-SHR-001
AC-REL-003
AC-REL-006
AC-LRN-009
AC-SHR-001
Bestaande gedeelde oefeningen behouden wanneer de vriendschap daarna wordt beëindigd