UC-BEH-MOD-007 — Modulemigratie docentgericht uitvoeren
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-MOD-007 |
| Naam | Modulemigratie docentgericht uitvoeren |
| Domein | Beheerder / Modules beheren |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, database, autorisatiecomponent, modulebeheercomponent, historiecomponent, strategy-interface |
| Rolcontext | Actieve beheerdercontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Content > Modules beheren |
| Gerelateerde usecases | UC-BEH-MOD-001, UC-BEH-MOD-002, UC-BEH-MOD-003, UC-BEH-MOD-004, UC-BEH-MOD-005, UC-BEH-MOD-006, UC-BEH-MOD-008, UC-BEH-MOD-009, UC-BEH-MOD-010 |
| Primaire entiteiten | ExerciseModules, Exercises, ExerciseHistory, ExerciseModuleMigrations, ExerciseRuns, Users |
| Secundaire entiteiten / events | TeacherLevels, TeacherLevelCategories, TeacherLevelCategoryExercises, UserRoles, modulebeheer-readmodels, strategy-interface |
| Gerelateerde popups | POP-BEH-MOD-MIGRATION-TEACHER-CONFIRM |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een beheerder vanuit de sectie Migreren - docent alle relevante actieve concrete oefeningen van één geselecteerde docent migreert van de geopende bronmodule naar een actieve doelmodule.
De flow gebruikt twee opeenvolgende stappen: eerst kiest de beheerder een actieve doelmodule, daarna kiest de beheerder een docent die de bronmodule daadwerkelijk gebruikt. De definitieve actie blijft uitgeschakeld zolang stap 1 niet geldig is afgerond.
De migratie wijzigt actieve Exercises vooruit voor toekomstig gebruik. Historische ExerciseRuns, resultaten, gedeelde oefeningen en PDF-contexten worden niet herschreven. Compatibiliteit wordt niet hard bewezen door OefenHub; de beheerder neemt deze beheeractie bewust met verplichte reden.
Uitgangspunten
- Technische modules worden administratief beheerd in ExerciseModules en niet runtime ontdekt uit assemblies of codepaden.
- Een concrete oefening verwijst altijd naar precies één ExerciseModules-record.
- Modulebeheer wijzigt centrale modulemetadata en onderhoudsacties, niet de inhoudelijke docentconfiguratie van oefeningen.
- Historische runs behouden hun oorspronkelijke modulecontext.
- Popupinhoud blijft bronhoudend in het centrale popupregister.
3. Scope
Deze usecase beschrijft:
- Doelmodule kiezen voor de geopende bronmodule.
- Docent kiezen die minimaal één actieve oefening op de bronmodule heeft.
- Migreren van alle relevante actieve concrete oefeningen van die docent.
- Vastleggen van ExerciseModuleMigrations met scope Teacher.
- Vastleggen van ExerciseHistory per gemigreerde oefening.
- Behouden van historische runs en resultaten.
Deze usecase beschrijft niet:
- Concrete docent-oefeningen configureren of de modulespecifieke configuratiepayload bewerken; dat blijft bronhoudend in docentflows of docentondersteuning.
- Leerlingruns, resultaten, geschiedenis of gedeelde oefeningen herschrijven; historische runs behouden hun oorspronkelijke modulecontext.
- Nieuwe technische modulecode leveren of implementeren; modulecode blijft onderdeel van de technische codebase.
- Popupteksten, knopteksten of inputlabels specificeren; usecases verwijzen uitsluitend naar PopupKey.
- Globale migratie voor alle docenten; dit hoort bij UC-BEH-MOD-008.
- Proefmigratie op één specifieke oefening; dit hoort bij UC-BEH-MOD-009.
- Backwards compatibility technisch bewijzen of afdwingen.
- Nieuwe doelmodule aanmaken tijdens de migratieflow.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Docent / Oefeningen configureren | Docenten kiezen en configureren concrete oefeningen op basis van beschikbare modules; centrale technische module-identiteit wordt hier beheerd. |
| Beheerder / Docentondersteuning | Support kan concrete docentstructuren en oefeningen inspecteren, maar centrale modulemetadata en migraties worden hier beheerd. |
| Leerling / Oefenen en resultaten | Leerlingruns blijven historische uitvoeringen en worden niet herschreven door modulebeheer. |
| Database-informatie | ExerciseModules, ExerciseModuleMigrations en ExerciseHistory dragen de technische module-identiteit, migratieaudit en oefeninghistorie. |
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is succesvol ingelogd in OefenHub. |
| PRE-002 | De backend heeft server-side vastgesteld dat de gebruiker een actieve beheerderrol heeft. |
| PRE-003 | De beheerder bevindt zich binnen de beheeromgeving via Content > Modules beheren. |
| PRE-004 | De pagina gebruikt actuele serverdata; clientstate, routeparameters of verborgen formuliervelden bepalen geen autorisatie of module-identiteit. |
| PRE-005 | De beheerder heeft de detailweergave van de bronmodule geopend. |
| PRE-006 | De sectie Migreren - docent is zichtbaar. |
| PRE-007 | Er bestaat minimaal één andere actieve doelmodule. |
| PRE-008 | Er bestaat minimaal één docent met actieve oefeningen op de bronmodule. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Alle relevante actieve oefeningen van de geselecteerde docent verwijzen naar de doelmodule wanneer de migratie slaagt. |
| POST-002 | Per gemigreerde oefening is ExerciseHistory vastgelegd met ActionType MODULE_MIGRATION_SOURCE_TO_TARGET. |
| POST-003 | ExerciseModuleMigrations bevat bronmodule, doelmodule, scope Teacher, docentcontext, actor, tijdstip en reden. |
| POST-004 | Historische ExerciseRuns en bestaande resultaten blijven ongewijzigd. |
| POST-005 | Bij fout wordt geen gedeeltelijk onherleidbare migratie achtergelaten. |
6. Trigger
De usecase start wanneer de beheerder in Migreren - docent een doelmodule en docent kiest en de migratie bevestigt.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Migreren - docent | Kiest actieve doelmodule. | De frontend valideert dat doelmodule verschilt van bronmodule. | Stap 1. |
| 2 | Backend | ModuleService | Laadt beschikbare doelmodules. | Alleen actieve modules zijn selecteerbaar. | ExerciseModules.IsActive = true. |
| 3 | Beheerder | Migreren - docent | Kiest docent. | De lijst bevat alleen docenten met actieve oefeningen op de bronmodule. | Stap 2. |
| 4 | Backend | MigratieService | Bepaalt migratiescope. | Alle actieve oefeningen van deze docent op de bronmodule worden geselecteerd. | Exercises, TeacherLevels. |
| 5 | Frontend | Popup | Toont bevestiging met verplichte reden. | De beheerder bevestigt bewust de migratie. | PopupKey POP-BEH-MOD-MIGRATION-TEACHER-CONFIRM. |
| 6 | Beheerder | Popup | Bevestigt met reden. | De backend start transactionele verwerking. | Reason verplicht. |
| 7 | Backend | MigratieService | Valideert bron, doel en docent opnieuw. | Clientstate mag de scope niet verruimen. | Server-side validatie. |
| 8 | Backend | MigratieService | Update Exercises. | ExerciseModuleId wordt voor geselecteerde actieve oefeningen aangepast naar doelmodule. | Exercises.ExerciseModuleId. |
| 9 | Backend | MigratieService | Schrijft ExerciseModuleMigrations. | Scope Teacher en docentcontext worden vastgelegd. | ExerciseModuleMigrations. |
| 10 | Backend | HistorieService | Schrijft ExerciseHistory per oefening. | ActionType MODULE_MIGRATION_SOURCE_TO_TARGET. | ExerciseHistory. |
| 11 | Frontend | Migreren - docent | Toont resultaat en bijgewerkte impact. | Bronmodule-impact wordt herberekend. | Readmodel. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | Doelmodule is gelijk aan bronmodule. | De doelkeuze wordt geweigerd. | Niet van toepassing. | Geen. |
| ALT-002 | 1 | Geen actieve doelmodule beschikbaar. | De migratieflow toont een lege staat; definitieve actie is uitgeschakeld. | Niet van toepassing. | Geen. |
| ALT-003 | 3 | Geen docent gebruikt de bronmodule. | Stap 2 toont geen kandidaten en migratie kan niet worden uitgevoerd. | Niet van toepassing. | Geen. |
| ALT-004 | 5 | Beheerder annuleert. | Geen migratie wordt uitgevoerd. | POP-BEH-MOD-MIGRATION-TEACHER-CONFIRM. | Geen. |
| ALT-005 | 6 | Reden ontbreekt. | De bevestiging wordt geweigerd. | POP-BEH-MOD-MIGRATION-TEACHER-CONFIRM. | Geen. |
| ALT-006 | 7 | Scope is intussen gewijzigd. | De backend herberekent scope en voert geen verouderde migratie uit zonder actuele bevestiging. | Niet van toepassing. | Geen. |
| ALT-007 | 8 | Een oefening kan niet worden bijgewerkt. | De transactie wordt teruggedraaid of fout wordt volledig auditbaar afgehandeld zonder onherleidbare tussenstaat. | Niet van toepassing. | Geen gedeeltelijke migratie. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Docentgerichte migratie werkt altijd vanuit de geopende bronmodule. |
| BR-002 | Stap 1 doelmodule moet geldig zijn voordat stap 2 definitief uitvoerbaar is. |
| BR-003 | Alleen actieve modules zijn selecteerbaar als doelmodule. |
| BR-004 | De docentlijst bevat alleen docenten die minimaal één actieve concrete oefening op de bronmodule hebben. |
| BR-005 | Migreren naar dezelfde module is niet toegestaan. |
| BR-006 | De beheerder moet een reden opgeven. |
| BR-007 | Historische runs, resultaten, geschiedenis, PDF-export en gedeelde oefeningen worden niet herschreven. |
| BR-008 | OefenHub dwingt backwards compatibility niet hard af; dit blijft een expliciet beheerdersrisico. |
| BR-009 | Per gemigreerde oefening moet ExerciseHistory zichtbaar maken dat modulemigratie heeft plaatsgevonden. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | SourceExerciseModuleId is de geopende module en mag niet vanuit clientstate worden overschreven. |
| VAL-002 | TargetExerciseModuleId is verplicht, actief en verschillend van bronmodule. |
| VAL-003 | TeacherUserId is verplicht en moet een docent zijn met relevante actieve oefeningen op de bronmodule. |
| VAL-004 | Reason is verplicht en maximaal 500 tekens. |
| VAL-005 | Migratiescope wordt server-side berekend. |
| VAL-006 | Alle te migreren Exercises moeten voor aanpassing nog naar de bronmodule verwijzen. |
| VAL-007 | De migratie moet transactioneel of volledig herleidbaar worden verwerkt. |
11. Datamutaties en events
| ID | Mutatie / event | Toelichting |
|---|---|---|
| MUT-001 | Update Exercises | ExerciseModuleId wordt voor de geselecteerde actieve oefeningen aangepast naar de doelmodule. |
| MUT-002 | Insert ExerciseModuleMigrations | Migratieheader met bron, doel, scope Teacher, docentcontext, snapshots, actor, tijdstip en reden. |
| MUT-003 | Insert ExerciseHistory | Per gemigreerde oefening een MODULE_MIGRATION_SOURCE_TO_TARGET-regel. |
12. Geen datamutaties
| ID | Geen mutatie | Reden |
|---|---|---|
| NO-001 | ExerciseRuns | Historische runcontext blijft ongewijzigd. |
| NO-002 | ExerciseRunProgress | Vraagvoortgang blijft ongewijzigd. |
| NO-003 | SharedExercises | Gedeelde oefenrecords en snapshots blijven ongewijzigd. |
| NO-004 | ModuleConfigurationJsonBase64 | Configuratiepayload wordt niet automatisch geconverteerd tenzij expliciet onderdeel van technische migratieverwerking; deze usecase legt de functionele grens vast. |
| NO-005 | UserRoles | Docent- of beheerderrollen blijven ongewijzigd. |
13. State diagram
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
| PopupKey | Gebruik |
|---|---|
| POP-BEH-MOD-MIGRATION-TEACHER-CONFIRM | Bevestiging van docentgerichte modulemigratie met verplichte reden. |
De popupinhoud, knopteksten, inputlabels en themakeuze blijven bronhoudend in het popupregister en popup-themes.
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Document | Afleiding |
|---|---|
| Functioneel Ontwerp | Docentgerichte modulemigratie migreert actieve concrete oefeningen van één docent van bronmodule naar doelmodule. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, oefenmodulecontract, background jobs en teststrategie beschrijven de technische uitwerking. Migratie schrijft ExerciseModuleMigrations en ExerciseHistory en wijzigt Exercises.ExerciseModuleId. |
| Software Requirements Specification | SRS moet stapvolgorde, doelmodulevalidatie, docentfilter en historische non-mutatie eisen. |
| Database | Gebruikt ExerciseModules, Exercises, ExerciseModuleMigrations en ExerciseHistory. |
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-BEH-MOD-007-001 | SRS-TCH-001 SRS-ADM-004 SRS-ADM-001 SRS-MOD-004 AC-TCH-001 AC-ADM-004 AC-ADM-001 AC-MOD-004 | Docentgerichte modulemigratie ondersteunen vanuit een geopende bronmodule |
REQ-BEH-MOD-007-002 | SRS-ADM-004 SRS-ADM-001 SRS-MOD-003 AC-ADM-004 AC-ADM-001 AC-MOD-003 | Eerst een actieve doelmodule vereisen |
REQ-BEH-MOD-007-003 | SRS-AUTH-001 SRS-ADM-004 SRS-ADM-001 SRS-MOD-003 AC-AUTH-001 AC-ADM-004 AC-ADM-001 AC-MOD-003 | Migreren naar dezelfde module blokkeren |
REQ-BEH-MOD-007-004 | SRS-LRN-009 SRS-TCH-002 SRS-ADM-004 SRS-ADM-001 SRS-MOD-003 AC-LRN-009 AC-TCH-002 AC-ADM-004 AC-ADM-001 AC-MOD-003 | Alleen docenten tonen die actieve oefeningen op de bronmodule hebben |
REQ-BEH-MOD-007-005 | SRS-ADM-001 AC-ADM-001 | Vóór uitvoering een verplichte reden vragen |
REQ-BEH-MOD-007-006 | SRS-ADM-004 SRS-ADM-001 SRS-MOD-003 AC-ADM-004 AC-ADM-001 AC-MOD-003 | Exercises.ExerciseModuleId voor de geldige scope aanpassen |
REQ-BEH-MOD-007-007 | SRS-ADM-004 SRS-ADM-001 SRS-MOD-003 SRS-NFR-AUD-001 AC-ADM-004 AC-ADM-001 AC-MOD-003 AC-NFR-AUD-001 | ExerciseModuleMigrations met scope Teacher vastleggen |
REQ-BEH-MOD-007-008 | SRS-LRN-009 SRS-ADM-001 SRS-NFR-AUD-001 AC-LRN-009 AC-ADM-001 AC-NFR-AUD-001 | Per gemigreerde oefening ExerciseHistory vastleggen |
REQ-BEH-MOD-007-009 | SRS-LRN-009 SRS-SHR-001 SRS-ADM-001 AC-LRN-009 AC-SHR-001 AC-ADM-001 | Historische ExerciseRuns, resultaten en gedeelde oefeningen niet herschrijven |