UC-BEH-CAT-005 — Categoriemigratie voorbereiden
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-CAT-005 |
| Naam | Categoriemigratie voorbereiden |
| Domein | Beheerder / Categorieën beheren |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, database, autorisatiecomponent, categoriebeheercomponent, historiecomponent |
| Rolcontext | Actieve beheerdercontext; server-side bepaald vanuit de ingelogde gebruiker |
| Betrokken schermen | Content > Categorieën beheren |
| Gerelateerde usecases | UC-BEH-CAT-001, UC-BEH-CAT-002, UC-BEH-CAT-003, UC-BEH-CAT-004, UC-BEH-CAT-006, UC-BEH-CAT-007 |
| Primaire entiteiten | Categories, CategoryHistory, CategoryMigrations, TeacherLevelCategories, TeacherLevelCategoryExercises |
| Secundaire entiteiten / events | Users, ExerciseRuns, SharedExercises, categoriebeheer-readmodels |
| Gerelateerde popups | Niet van toepassing |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een beheerder vanuit de geopende broncategorie een migratie naar een bestaande doelcategorie voorbereidt. De broncategorie staat vast door de detailcontext; de beheerder kiest alleen nog een doelcategorie.
Voorbereiden betekent: doelcategorie selecteren, voorwaarden controleren, impact bepalen, conflicten zichtbaar maken en de beheerder laten beoordelen of uitvoering verantwoord is. Er worden nog geen koppelingen gewijzigd en er wordt nog geen CategoryMigrations-record aangemaakt.
De migratievoorbereiding is noodzakelijk omdat dubbele of overlappende categorieën gevolgen kunnen hebben voor meerdere docentniveaus, oefeningen en leerlingweergaven.
Uitgangspunten
- Categorieën zijn centrale onderwijsinhoud en geen private docentlabels.
- Naam, kleur en icoon vormen samen de centrale categorie-identiteit.
- Beheeracties op categorieën zijn volledig server-side gevalideerd.
- Historische resultaten behouden hun oorspronkelijke categoriecontext.
- Popupinhoud blijft bronhoudend in het centrale popupregister.
3. Scope
Deze usecase beschrijft:
- Selecteren van een bestaande doelcategorie.
- Blokkeren van migratie naar dezelfde categorie.
- Beperken van doelkeuze tot actieve categorieën.
- Bepalen van impact op actieve docentniveaukoppelingen en oefenkoppelingen.
- Detecteren van conflicten wanneer doelkoppelingen of oefenkoppelingen al bestaan.
- Tonen van een uitvoerbaar migratievoorstel zonder datamutatie.
Deze usecase beschrijft niet:
- Docentniveaubeheer, leerlingautorisaties of oefeningconfiguratie wijzigen; die blijven bronhoudend in docentflows of docentondersteuning.
- Nieuwe centrale categorieën aanmaken vanuit beheer; categorie-aanmaak is bronhoudend in de docentflow of via technische migratie wanneer dat expliciet nodig is.
- Historische exercise runs herschrijven; bestaande runs behouden hun oorspronkelijke categoriecontext.
- Popupteksten of knopteksten specificeren; usecases verwijzen uitsluitend naar PopupKey.
- Migratie daadwerkelijk uitvoeren; dit hoort bij UC-BEH-CAT-006.
- Nieuwe doelcategorie aanmaken tijdens migratie.
- Conflicten handmatig per rij oplossen buiten de vastgelegde migratieregels.
3.1 Afbakening met aangrenzende domeinen
| Onderdeel | Afbakening |
|---|---|
| Docent / Oefenaanbod | Docenten koppelen categorieën aan niveaus en maken waar toegestaan nieuwe centrale categorieën aan; beheer past de centrale identiteit en onderhoudsacties toe. |
| Beheerder / Docentondersteuning | Support op concrete docentstructuren mag categoriegebruik inspecteren, maar centrale categorie-identiteit wordt hier beheerd. |
| Leerling / Oefenaanbod | Leerlingen zien alleen afgeleide toegankelijke categorieën; deze bundel bepaalt niet zelfstandig leerlingtoegang. |
| Database-informatie | Categories, CategoryHistory en CategoryMigrations blijven de technische bron voor centrale categorie-identiteit en audit. |
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 > Categorieën beheren. |
| PRE-004 | De pagina gebruikt actuele serverdata; clientstate, routeparameters of verborgen formuliervelden bepalen geen autorisatie of categorie-identiteit. |
| PRE-005 | De beheerder heeft de beheerweergave van de broncategorie geopend. |
| PRE-006 | De broncategorie bestaat en is server-side gevalideerd. |
| PRE-007 | Er is minimaal één andere actieve categorie beschikbaar als mogelijke doelcategorie. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De beheerder ziet een migratievoorstel met bron, doel, impact en conflicten. |
| POST-002 | Geen categorie, koppeling, oefening of historie is gewijzigd. |
| POST-003 | De migratie kan alleen worden uitgevoerd wanneer de voorbereiding geldig is. |
| POST-004 | De doelcategorie is niet gelijk aan de broncategorie. |
| POST-005 | De doelcategorie is een bestaande actieve centrale categorie. |
6. Trigger
De usecase start wanneer de beheerder in de sectie Migreren naar een doelcategorie kiest of het migratievoorstel laat berekenen.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Sectie Migreren naar | Opent de migratiesectie. | De frontend toont de broncategorie read-only. | Bron CategoryId uit detailcontext. |
| 2 | Backend | Doelcategoriequery | Laadt mogelijke doelcategorieën. | Alleen actieve categorieën behalve de bron zijn selecteerbaar. | Categories.IsDeleted = false. |
| 3 | Beheerder | Doelkeuze | Kiest een bestaande doelcategorie. | De frontend vraagt impactanalyse op. | TargetCategoryId. |
| 4 | Backend | Autorisatiecomponent | Controleert beheerdercontext. | Alleen beheerder mag migratie voorbereiden. | Server-side autorisatie. |
| 5 | Backend | MigratieService | Valideert bron en doel. | Bron en doel moeten bestaan en verschillend zijn. | Categories. |
| 6 | Backend | MigratieService | Berekent te verplaatsen niveau-categoriekoppelingen. | Bepaalt bron TeacherLevelCategories en bestaande doelkoppelingen. | TeacherLevelCategories. |
| 7 | Backend | MigratieService | Berekent oefenkoppelconflicten. | Bepaalt welke oefeningen onder doelcategorie al bestaan. | TeacherLevelCategoryExercises. |
| 8 | Frontend | Migratievoorstel | Toont impact en conflicten. | De beheerder ziet wat uitvoering zal doen. | Read-only voorstel. |
| 9 | Frontend | Uitvoeractie | Maakt Uitvoeren alleen beschikbaar wanneer voorstel geldig is. | De vervolgactie leidt naar UC-BEH-CAT-006. | Voorbereide migratiecontext. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | Broncategorie is soft deleted of al gemigreerd. | De backend bepaalt of voorbereiding is toegestaan; normaal wordt uitvoering geblokkeerd wanneer bron niet nieuw kiesbaar is maar nog wel historie heeft. | Niet van toepassing. | Geen. |
| ALT-002 | 2 | Geen actieve doelcategorie beschikbaar. | De migratiesectie toont dat migratie niet kan worden voorbereid. | Niet van toepassing. | Geen. |
| ALT-003 | 3 | Beheerder kiest dezelfde categorie als doel. | De keuze wordt geweigerd. | Niet van toepassing. | Geen. |
| ALT-004 | 5 | Bron of doel bestaat niet meer. | Het voorstel wordt niet opgesteld; de detailcontext moet herladen worden. | Niet van toepassing. | Geen. |
| ALT-005 | 7 | Er zijn conflicten met bestaande doelkoppelingen. | Het voorstel toont hoe dubbele records worden voorkomen; uitvoeren blijft alleen mogelijk als de vaste migratieregels alle conflicten kunnen afhandelen. | Niet van toepassing. | Geen. |
| ALT-006 | 8 | Impactanalyse kan niet volledig worden berekend. | Uitvoeren blijft geblokkeerd. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | De broncategorie is altijd de geopende categorie en kan niet via een verborgen veld worden gewijzigd. |
| BR-002 | Migreren naar dezelfde categorie is niet toegestaan. |
| BR-003 | De doelcategorie moet een bestaande actieve centrale categorie zijn. |
| BR-004 | Tijdens voorbereiding worden geen CategoryMigrations of CategoryHistory-records geschreven. |
| BR-005 | Het migratievoorstel moet dubbele TeacherLevelCategories en TeacherLevelCategoryExercises expliciet herkennen. |
| BR-006 | Historische ExerciseRuns tellen niet als te migreren records en worden niet in het mutatievoorstel opgenomen. |
| BR-007 | Een migratievoorstel is alleen uitvoerbaar wanneer de backend de impact volledig heeft kunnen berekenen. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | SourceCategoryId is verplicht en komt uit de server-side detailcontext. |
| VAL-002 | TargetCategoryId is verplicht en moet verschillen van SourceCategoryId. |
| VAL-003 | TargetCategoryId moet verwijzen naar een actieve Categories-record. |
| VAL-004 | Bron- en doelcategorie moeten op het moment van voorbereiding opnieuw uit de database worden gelezen. |
| VAL-005 | Impactaantallen en conflictregels worden server-side berekend. |
| VAL-006 | De uitvoerbaarheid van het voorstel mag niet door de client worden bepaald. |
11. Datamutaties en events
| ID | Mutatie / event | Toelichting |
|---|---|---|
| MUT-001 | Geen functionele mutatie | Voorbereiden berekent alleen een migratievoorstel. |
| MUT-002 | Geen domeinevent | Zonder uitvoering ontstaat geen CategoryMigrations-, CategoryHistory- of systeemberichtrecord. |
12. Geen datamutaties
| ID | Geen mutatie | Reden |
|---|---|---|
| NO-001 | Categories | Bron en doel blijven ongewijzigd. |
| NO-002 | TeacherLevelCategories | Geen koppeling wordt verplaatst of gedeactiveerd. |
| NO-003 | TeacherLevelCategoryExercises | Geen oefenkoppeling wordt verplaatst of gedeactiveerd. |
| NO-004 | CategoryMigrations | Voorbereiden legt geen migratie vast. |
| NO-005 | CategoryHistory | Voorbereiden schrijft geen categoriehistorie. |
13. State diagram
Niet van toepassing. Deze usecase berekent een uitvoerbaar migratievoorstel zonder persistente migratiestatus of CategoryMigrations-record aan te maken.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
Niet van toepassing.
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Document | Afleiding |
|---|---|
| Functioneel Ontwerp | Migreren naar werkt vanuit een vaste broncategorie en een bestaande actieve doelcategorie. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, databaseontwerp en historie en background jobs beschrijven de technische uitwerking. De voorbereiding gebruikt een server-side migratieservice voor impact- en conflictanalyse. |
| Software Requirements Specification | SRS moet eisen dat voorbereiding geen mutatie uitvoert en dat conflictsituaties zichtbaar zijn. |
| Database | TeacherLevelCategories en TeacherLevelCategoryExercises vormen de impactbron; CategoryMigrations ontstaat pas bij uitvoering. |
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 |
|---|---|---|
UC-BEH-CAT-005-REQ-001 | SRS-CAT-004 SRS-ADM-006 SRS-ADM-001 AC-CAT-004 AC-ADM-006 AC-ADM-001 | Migratievoorbereiding altijd vanuit de geopende broncategorie uitvoeren |
UC-BEH-CAT-005-REQ-002 | SRS-AUTH-001 SRS-CAT-001 SRS-ADM-006 SRS-ADM-001 AC-AUTH-001 AC-CAT-001 AC-ADM-006 AC-ADM-001 | Migreren naar dezelfde categorie blokkeren |
UC-BEH-CAT-005-REQ-003 | SRS-CAT-001 SRS-ADM-001 AC-CAT-001 AC-ADM-001 | Alleen actieve bestaande doelcategorieën selecteerbaar maken |
UC-BEH-CAT-005-REQ-004 | SRS-CAT-002 SRS-TCH-002 SRS-ADM-001 AC-CAT-002 AC-TCH-002 AC-ADM-001 | Impact op docentniveaukoppelingen berekenen |
UC-BEH-CAT-005-REQ-005 | SRS-ADM-001 AC-ADM-001 | Impact op onderliggende oefenkoppelingen berekenen |
UC-BEH-CAT-005-REQ-006 | SRS-ADM-001 AC-ADM-001 | Conflicten met bestaande doelkoppelingen zichtbaar maken |
UC-BEH-CAT-005-REQ-007 | SRS-ADM-001 AC-ADM-001 | Tijdens migratievoorbereiding geen data wijzigen |
UC-BEH-CAT-005-REQ-008 | SRS-AUTH-001 SRS-ADM-001 AC-AUTH-001 AC-ADM-001 | Uitvoering blokkeren wanneer de impactanalyse niet volledig of niet afhandelbaar is |