UC-DOC-OEF-005 - Oefening bewerken
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-DOC-OEF-005 |
| Naam | Oefening bewerken |
| Domein | Docent |
| Subdomein | Oefeningen configureren en testen |
| Primaire actor | Docent |
| Secundaire actor(en) | Systeem, technische module-interface |
| Rolcontext | Docentcontext met bewerkrechten binnen het geselecteerde niveau |
| Betrokken schermen | Docent - Oefeningdetail, oefening bewerken, moduleconfiguratie bewerken |
| Gerelateerde usecases | UC-DOC-OEF-001, UC-DOC-OEF-004, UC-DOC-OEF-006, UC-DOC-OEF-008, UC-DOC-SAM-004 |
| Primaire entiteiten | Exercises, ExerciseModules, ExerciseHistory |
| Secundaire entiteiten / events | ModuleConfigurationJsonBase64, LevelCategories, Levels, LevelCollaborators, module-specifieke configuratie-DTO |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Niet van toepassing |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een docent een bestaande concrete oefening binnen de eigen docentcontext bewerkt. Het gaat om gegevens die bij de concrete oefening horen, zoals naam, icoon en de module-specifieke configuratiepayload.
De technische module zelf wordt niet gewijzigd en de oefening wordt niet naar een andere module gemigreerd. Een oefening blijft verwijzen naar hetzelfde ExerciseModules-record; modulemigratie is een beheerderflow.
Bewerken is auditgevoelig omdat wijzigingen invloed kunnen hebben op toekomstige leerlingruns. Historische runs blijven echter herleidbaar op basis van hun opgeslagen runcontext en worden niet inhoudelijk herschreven.
3. Scope
3.1 Binnen scope
- Openen van een bestaande oefening in bewerkmodus.
- Controleren van docentrol, niveaucontext en bewerkrechten.
- Laden van bestaande generieke oefeninggegevens.
- Laden van modulespecifieke bewerkconfiguratie via de technische module.
- Wijzigen van naam, icoon en moduleconfiguratie voor toekomstige runs.
- Uitvoeren van generieke en modulespecifieke validatie.
- Opslaan van gewijzigde oefeninggegevens.
- Auditbaar vastleggen van gewijzigde velden in ExerciseHistory.
- Behouden van historische runs zonder herschrijven.
3.2 Buiten scope
- Nieuwe oefening aanmaken.
- Oefening naar een andere technische module migreren.
- Oefening activeren of in onderhoud zetten.
- Bestaande leerlingruns, resultaten of geschiedenis herschrijven.
- Centrale categorie-identiteit wijzigen.
- Technische modules centraal beheren of migreren.
- Leerlingresultaten bekijken of wijzigen.
- Niveau-autorisaties aan leerlingen toekennen of intrekken.
- Relatie-uitnodigingen, docent-leerlingrelaties of docent-docentrelaties aanmaken.
- Account-, profiel- of toegankelijkheidsinstellingen wijzigen.
- Systeemnotificaties beheren of tonen.
- Beheerderondersteuning of centrale modulebeheerflows uitvoeren.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De docent is ingelogd. |
| PRE-002 | De gebruiker heeft een actieve docentrol. |
| PRE-003 | Er is een geldige docentcontext bepaald. |
| PRE-004 | Er is een geldig niveau geselecteerd. |
| PRE-005 | De docent is eigenaar van het niveau of actieve collaborator met passende bewerkrechten. |
| PRE-006 | Er is een categoriecontext beschikbaar binnen het geselecteerde niveau. |
| PRE-007 | De bestaande oefening bestaat. |
| PRE-008 | De oefening hoort bij de geselecteerde categorie- en niveaucontext. |
| PRE-009 | De docent heeft bewerkrechten voor de oefeningcontext. |
| PRE-010 | De gekoppelde technische module is voldoende beschikbaar om de bewerkconfiguratie te laden of er is een veilige blokkade mogelijk. |
| PRE-011 | De actuele configuratiepayload kan worden gelezen. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De oefening is gewijzigd wanneer alle validatie slaagt. |
| POST-002 | Alleen de toegestane concrete oefeninggegevens zijn aangepast. |
| POST-003 | De oefening blijft gekoppeld aan hetzelfde ExerciseModules-record. |
| POST-004 | Wijzigingen zijn auditbaar vastgelegd in ExerciseHistory. |
| POST-005 | Historische exercise runs en resultaten zijn niet herschreven. |
| POST-006 | Leerlingzichtbaarheid volgt nog steeds uit IsActive en de bestaande toegangregels. |
| POST-007 | Bij annuleren of validatiefout blijven bestaande waarden ongewijzigd. |
6. Trigger
De docent kiest vanuit het oefeningoverzicht of oefeningdetail voor Bewerken.
De docent kiest Opslaan nadat generieke of module-specifieke wijzigingen zijn aangebracht.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Docent | Oefeningoverzicht | Kiest Bewerken | Frontend opent bewerkroute | ExerciseId |
| 2 | Systeem | Backend | Controleert docentrol en context | Alleen bevoegde docent mag verder | UserRoles, Levels |
| 3 | Systeem | Backend | Controleert oefeningcontext | Oefening moet bij niveau en categorie horen | Exercises, LevelCategories |
| 4 | Systeem | Backend | Controleert bewerkrechten | Eigenaar of collaborator met bewerkrechten mag verder | LevelCollaborators |
| 5 | Systeem | Backend | Laadt oefeninggegevens | Naam, icoon, status en moduleverwijzing worden gelezen | Exercises |
| 6 | Systeem | Module-interface | Laadt bewerkcomponent | Module vertaalt bestaande payload naar bewerkcontext | GetModuleEditConfigureComponent |
| 7 | Docent | Bewerkformulier | Wijzigt toegestane velden | Frontend toont gewijzigde waarden | Name, IconKey, modulevelden |
| 8 | Docent | Bewerkformulier | Kiest Opslaan | Frontend verstuurt wijzigingen | Formulierdata |
| 9 | Systeem | Backend | Valideert generieke velden | Naam, icoon en context worden gecontroleerd | Generieke validatie |
| 10 | Systeem | Module-interface | Valideert moduleconfiguratie | Module geeft geldige payload of fouten terug | Modulevalidatie |
| 11 | Systeem | Backend | Bepaalt verschillen | Oude en nieuwe waarden worden vastgesteld | Diff voor historie |
| 12 | Systeem | Database | Slaat wijzigingen op | Exercises wordt bijgewerkt | UpdatedByUserId, UpdatedAtUtc |
| 13 | Systeem | Database | Legt historie vast | Per relevante wijziging ontstaat historie | ExerciseHistory |
| 14 | Systeem | Frontend | Toont bijgewerkte oefening | Docent ziet opgeslagen wijzigingen | Readmodel ververst |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Geen actieve docentrol | Blokkeer bewerkroute | Routeguard | Geen |
| ALT-002 | 3 | Oefening bestaat niet of hoort niet bij context | Toon niet-beschikbaarafhandeling | Inline melding | Geen |
| ALT-003 | 4 | Geen bewerkrechten | Open eventueel read-only of blokkeer | Toegangafhandeling | Geen |
| ALT-004 | 6 | Module-interface kan bestaande payload niet laden | Blokkeer bewerking en log technisch | Generieke foutafhandeling | Geen |
| ALT-005 | 7 | Docent wijzigt niets | Opslaan is niet nodig of wordt zonder mutatie genegeerd | Geen popup | Geen |
| ALT-006 | 9 | Generieke validatie faalt | Toon veldgerichte validatie | Inline validatie | Geen |
| ALT-007 | 10 | Modulevalidatie faalt | Toon modulespecifieke validatiefouten | Inline validatie | Geen |
| ALT-008 | 12 | Gelijktijdige wijziging gedetecteerd | Laat docent opnieuw laden of bevestigen volgens latere concurrencykeuze | Inline melding | Geen of rollback |
| ALT-009 | 13 | Historie kan niet worden vastgelegd | Wijziging wordt niet als succesvol beschouwd wanneer audit vereist is | Generieke foutafhandeling | Rollback |
| ALT-010 | 14 | Oefening is actief tijdens bewerking | Wijziging geldt voor toekomstige runs; bestaande runs blijven intact | Geen popup | Exercises bijgewerkt |
9. Business rules
| ID | Regel |
|---|---|
| BR-001 | Alleen bevoegde docenten mogen een concrete oefening bewerken. |
| BR-002 | Een docent bewerkt concrete oefeninggegevens, geen centrale modulegegevens. |
| BR-003 | Een bestaande oefening wordt niet via deze usecase naar een andere module gemigreerd. |
| BR-004 | De module-specifieke configuratie blijft eigendom van de modulevalidatie, maar opslag is generiek. |
| BR-005 | Wijzigingen aan naam, icoon en configuratie worden auditbaar vastgelegd. |
| BR-006 | Historische exercise runs worden niet herschreven door oefeningbewerking. |
| BR-007 | PDF-export en geschiedenis gebruiken historische runcontext waar van toepassing. |
| BR-008 | Bewerken van een actieve oefening heeft effect op toekomstige nieuwe runs, niet op afgeronde runs. |
| BR-009 | Clientstate mag niet bepalen welke oefening bewerkt mag worden. |
| BR-010 | Een wijziging zonder effectieve verschillen hoeft geen ExerciseHistory-regel op te leveren. |
| BR-011 | Wanneer auditregistratie verplicht is, hoort opslag en historie in één transactie. |
| BR-012 | Bewerken verandert niet automatisch de IsActive-status. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| ExerciseId | Moet bestaan en binnen de toegankelijke docentcontext vallen. |
| LevelId / CategoryId | Moeten overeenkomen met de oefeningcontext. |
| Name | Verplicht wanneer gewijzigd en passend binnen lengtebegrenzing. |
| IconKey | Moet verwijzen naar een toegestane oefeningicoonkeuze. |
| ExerciseModuleId | Blijft ongewijzigd in deze usecase. |
| ModuleConfigurationJsonBase64 | Moet door de technische module valideerbaar zijn. |
| UpdatedByUserId | Komt uit server-side docentcontext. |
| UpdatedAtUtc | Wordt server-side in UTC gezet. |
| ExerciseHistory.OldValue / NewValue | Moet relevante oude en nieuwe waarde per wijziging bevatten. |
| Concurrency | Moet veilig omgaan met gelijktijdige wijzigingen of verouderde formulieren. |
| IsActive | Wordt alleen gelezen; statuswijziging hoort bij UC-DOC-OEF-006. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 2 | Read | UserRoles / LevelCollaborators | Docentrechten worden gecontroleerd. |
| 3 | Read | Exercises / LevelCategories | Oefeningcontext wordt gevalideerd. |
| 6 | Read | Module-interface | Bewerkcomponent en DTO worden geladen. |
| 10 | Read | Module-interface | Modulespecifieke validatie wordt uitgevoerd. |
| 11 | Transform | Diff | Oude en nieuwe waarden worden vastgesteld. |
| 12 | Update | Exercises | Naam, icoon, configuratiepayload en auditvelden worden bijgewerkt. |
| 13 | Create | ExerciseHistory | Wijzigingen worden auditbaar vastgelegd. |
| 14 | Event | ExerciseUpdated | Domeinevent voor readmodelverversing en auditafleiding. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| ExerciseModules | De modulekoppeling wordt niet gewijzigd. |
| ExerciseRuns | Bestaande runs blijven intact. |
| Resultaatstatistieken | Historische statistieken worden niet herberekend. |
| LevelCategories | De categoriecontext blijft ongewijzigd. |
| StudentAuthorizations | Deze usecase wijzigt geen leerlingtoegang. |
| ExerciseRunProgress | Er wordt geen leerlingvoortgang aangepast. |
| SystemMessages | Er worden geen systeemberichten aangemaakt. |
| PrivateMessages | Er worden geen privéberichten aangemaakt. |
| RelationshipInvitations | Relatievorming blijft buiten scope. |
13. State diagram
Deze usecase wijzigt de inhoudelijke configuratie van een oefening, maar niet de status Actief/In onderhoud. De status blijft bestaan en wordt alleen via UC-DOC-OEF-006 gewijzigd.
Wanneer de oefening actief was, blijft zij actief tenzij de docent via de aparte statusflow kiest voor In onderhoud.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
16.1 Oefening bewerken
16.2 Geen bewerkrechten
16.3 Historische runs blijven intact
17. Popupverwijzingen
| PopupKey | Moment | Toelichting |
|---|---|---|
| Niet van toepassing | Deze usecase gebruikt geen domeinspecifieke popup. | Routeguard-, inline validatie- of componentafhandeling volstaat. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Docent kan concrete oefeninggegevens en configuratie wijzigen binnen eigen context. |
| Functioneel Ontwerp | Modulewisseling is geen docentbewerkactie maar beheerdermigratie. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, oefenruns en testuitvoering en background jobs beschrijven de technische uitwerking. Bewerkconfiguratie gebruikt GetModuleEditConfigureComponent. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, oefenruns en testuitvoering en background jobs beschrijven de technische uitwerking. Oude en nieuwe waarden worden in ExerciseHistory vastgelegd. |
| Software Requirements Specification | Historische runs mogen niet worden herschreven door oefeningbewerking. |
| Database | Exercises wordt bijgewerkt; ExerciseHistory registreert wijzigingen. |
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-DOC-OEF-005-001 | SRS-LRN-009 SRS-TCH-002 AC-LRN-009 AC-TCH-002 | Bestaande oefeningen alleen in geldige docentcontext bewerkbaar maken |
REQ-UC-DOC-OEF-005-002 | SRS-AUTH-001 SRS-TCH-001 AC-AUTH-001 AC-TCH-001 | Bewerkrechten server-side controleren |
REQ-UC-DOC-OEF-005-003 | SRS-TCH-001 SRS-MOD-003 AC-TCH-001 AC-MOD-003 | De bestaande moduleconfiguratie via de technische module kunnen openen |
REQ-UC-DOC-OEF-005-004 | SRS-TCH-001 SRS-MOD-003 AC-TCH-001 AC-MOD-003 | Generieke en modulespecifieke validatie uitvoeren vóór opslag |
REQ-UC-DOC-OEF-005-005 | SRS-TCH-001 SRS-MOD-003 AC-TCH-001 AC-MOD-003 | De ExerciseModuleId ongewijzigd laten bij gewone docentbewerking |
REQ-UC-DOC-OEF-005-006 | SRS-TCH-001 SRS-NFR-AUD-001 AC-TCH-001 AC-NFR-AUD-001 | Wijzigingen aan naam, icoon en configuratie auditbaar vastleggen |
REQ-UC-DOC-OEF-005-007 | SRS-TCH-001 AC-TCH-001 | Oude en nieuwe waarden of herleidbare verschillen registreren waar dat functioneel relevant is |
REQ-UC-DOC-OEF-005-008 | SRS-LRN-009 SRS-TCH-001 AC-LRN-009 AC-TCH-001 | Historische exercise runs en resultaten intact laten |
REQ-UC-DOC-OEF-005-009 | SRS-TCH-001 AC-TCH-001 | Statuswijzigingen gescheiden houden van inhoudelijke bewerking |
REQ-UC-DOC-OEF-005-010 | SRS-TCH-001 SRS-GUA-001 SRS-NFR-SEC-001 AC-TCH-001 AC-GUA-001 AC-NFR-SEC-001 | Gelijktijdige of verouderde bewerkingen veilig afhandelen |
REQ-UC-DOC-OEF-005-011 | SRS-AUTH-001 SRS-MSG-001 SRS-LRN-009 SRS-TCH-001 AC-AUTH-001 AC-MSG-001 AC-LRN-009 AC-TCH-001 | Door bewerken geen leerlingautorisaties of berichten wijzigen |
REQ-UC-DOC-OEF-005-012 | SRS-AUTH-001 SRS-TCH-001 SRS-MOD-003 SRS-NFR-SEC-001 AC-AUTH-001 AC-TCH-001 AC-MOD-003 AC-NFR-SEC-001 | Module-editorfouten veilig blokkeren zonder corrupte opslag |