UC-BEH-CAT-003 — Categoriegegevens wijzigen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-CAT-003 |
| Naam | Categoriegegevens wijzigen |
| 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-004, UC-BEH-CAT-005, 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 | POP-BEH-CAT-EDIT-CONFIRM |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een beheerder de centrale categorie-identiteit wijzigt: naam, kleur en icoon. Omdat deze identiteit door meerdere docenten, niveaus en leerlingweergaven kan worden gebruikt, is elke wijziging een beheeractie met verplichte bevestiging en reden.
De wijziging wordt opgeslagen op Categories en per inhoudelijk gewijzigd veld vastgelegd in CategoryHistory met ActionType UPDATE_NAME, UPDATE_COLOR of UPDATE_ICON. Een gecombineerde opslagactie kan dus meerdere historyregels opleveren.
De usecase wijzigt alleen de centrale identiteit. Zij wijzigt geen docentniveaukoppelingen, oefenkoppelingen, autorisaties, historische runs of gedeelde oefeningen.
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:
- Wijzigen van centrale categorienaam.
- Wijzigen van centrale categoriekleur.
- Wijzigen van centrale categorie-icoon.
- Valideren van uniekheid, kleurformaat en iconkey.
- Bevestiging met verplichte reden vóór definitieve verwerking.
- Vastleggen van CategoryHistory per gewijzigd veld.
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.
- Status wijzigen of soft-delete; dit hoort bij UC-BEH-CAT-004.
- Migreren naar een andere categorie; dit hoort bij UC-BEH-CAT-005 en UC-BEH-CAT-006.
- Docentcontextspecifieke volgorde of koppelingen wijzigen.
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 detailweergave van één categorie geopend. |
| PRE-006 | De categorie is niet geblokkeerd voor inhoudelijke wijziging door een lopende migratieactie. |
| PRE-007 | De beheerder voert minimaal één inhoudelijke wijziging in. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Categories bevat de nieuwe naam, kleur en/of icoon. |
| POST-002 | UpdatedByUserId en UpdatedAtUtc zijn bijgewerkt. |
| POST-003 | Per gewijzigd veld is een CategoryHistory-record aangemaakt. |
| POST-004 | Niet gewijzigde velden blijven ongewijzigd. |
| POST-005 | Docentniveaukoppelingen, oefenkoppelingen en historische runs zijn niet gewijzigd. |
6. Trigger
De usecase start wanneer de beheerder in de sectie Categorie gewijzigde categoriegegevens opslaat.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Sectie Categorie | Wijzigt naam, kleur en/of icoon. | De frontend markeert gewijzigde velden. | Formulierdata. |
| 2 | Beheerder | Sectie Categorie | Kiest Opslaan. | De backend ontvangt de wijzigingsaanvraag. | CategoryId plus nieuwe waarden. |
| 3 | Backend | Autorisatiecomponent | Controleert beheerdercontext. | Alleen beheerder mag centrale identiteit wijzigen. | Server-side autorisatie. |
| 4 | Backend | Validatiecomponent | Valideert naam, kleur, icoon en uniqueness. | Ongeldige waarden worden geweigerd. | Categories constraints. |
| 5 | Frontend | Popup | Toont bevestigingspopup met verplichte reden. | De beheerder moet de wijziging bevestigen en reden invullen. | PopupKey POP-BEH-CAT-EDIT-CONFIRM. |
| 6 | Beheerder | Popup | Bevestigt de wijziging met reden. | De backend verwerkt de wijziging transactioneel. | Reason verplicht. |
| 7 | Backend | CategorieService | Slaat gewijzigde velden op. | Categories wordt bijgewerkt. | Categories UpdatedAtUtc, UpdatedByUserId. |
| 8 | Backend | HistorieService | Schrijft history per gewijzigd veld. | ActionType volgt het gewijzigde veld. | CategoryHistory. |
| 9 | Frontend | Detailweergave | Toont bijgewerkte categoriegegevens. | Impactwaarden worden opnieuw geladen. | Nieuw detailreadmodel. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | Geen veld is inhoudelijk gewijzigd. | Opslaan wordt niet uitgevoerd of resulteert in geen mutatie. | Niet van toepassing. | Geen. |
| ALT-002 | 4 | Naam is niet uniek binnen actieve records. | De backend weigert de wijziging en toont validatiefeedback. | Niet van toepassing. | Geen. |
| ALT-003 | 4 | ColorHex heeft ongeldig formaat. | De backend weigert de wijziging. | Niet van toepassing. | Geen. |
| ALT-004 | 4 | IconKey is onbekend of niet toegestaan. | De backend weigert de wijziging. | Niet van toepassing. | Geen. |
| ALT-005 | 5 | Beheerder annuleert de bevestigingspopup. | De wijziging wordt niet opgeslagen. | POP-BEH-CAT-EDIT-CONFIRM. | Geen. |
| ALT-006 | 6 | Reden ontbreekt. | De bevestiging wordt geweigerd. | POP-BEH-CAT-EDIT-CONFIRM. | Geen. |
| ALT-007 | 7 | Gelijktijdige wijziging door andere beheerder. | De backend detecteert verouderde data en vraagt herladen of opnieuw controleren. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Naam, kleur en icoon zijn centrale categorie-identiteit en werken door in alle contexten waar dezelfde categorie zichtbaar is. |
| BR-002 | Een wijziging vereist altijd een verplichte reden van de beheerder. |
| BR-003 | Per inhoudelijk gewijzigd veld wordt een afzonderlijk CategoryHistory-record geschreven. |
| BR-004 | Een gecombineerde wijziging van naam en kleur levert aparte ActionType-regels op. |
| BR-005 | Categories.Name moet uniek blijven binnen actieve records. |
| BR-006 | Een categoriewijziging herschrijft geen historische ExerciseRuns of SharedExercises-snapshots. |
| BR-007 | Docenten kunnen centrale categorie-identiteit niet via hun eigen niveaucontext wijzigen wanneer de categorie gedeeld in gebruik is. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | Name is verplicht, getrimd en maximaal 150 tekens. |
| VAL-002 | Name moet uniek zijn binnen actieve Categories-records. |
| VAL-003 | ColorHex is verplicht en moet voldoen aan het hex-formaat #RRGGBB. |
| VAL-004 | IconKey is verplicht en moet voorkomen in de toegestane categorie-icoonset. |
| VAL-005 | Reason is verplicht en maximaal 500 tekens voor CategoryHistory. |
| VAL-006 | Alle wijzigingen worden server-side vergeleken met de actuele databasewaarde. |
| VAL-007 | CategoryId mag niet via de client worden vervangen door een ander record. |
11. Datamutaties en events
| ID | Mutatie / event | Toelichting |
|---|---|---|
| MUT-001 | Update Categories | Name, ColorHex en/of IconKey worden bijgewerkt, inclusief UpdatedByUserId en UpdatedAtUtc. |
| MUT-002 | CategoryHistory CREATE | Per gewijzigd veld wordt één CategoryHistory-regel geschreven met UPDATE_NAME, UPDATE_COLOR of UPDATE_ICON. |
| MUT-003 | Auditreadmodel vernieuwen | De beheerweergave leest de actuele categoriegegevens opnieuw. |
12. Geen datamutaties
| ID | Geen mutatie | Reden |
|---|---|---|
| NO-001 | TeacherLevelCategories | Categorie-koppelingen aan docentniveaus blijven gelijk. |
| NO-002 | TeacherLevelCategoryExercises | Oefenkoppelingen blijven gelijk. |
| NO-003 | CategoryMigrations | Een gewone identiteitswijziging maakt geen migratierecord aan. |
| NO-004 | ExerciseRuns | Historische runcontext wordt niet aangepast. |
| NO-005 | SystemMessages | Categoriegegevens wijzigen verstuurt geen systeembericht; de wijziging blijft zichtbaar via CategoryHistory. |
13. State diagram
Niet van toepassing. Deze usecase wijzigt categorie-identiteitsvelden, maar kent geen afzonderlijke processtatus. De mutatie- en auditlifecycle staan in hoofdstuk 15.
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
Deze usecase verwijst uitsluitend naar PopupKey. Popupteksten, knopteksten, inputlabels, acties en themakeuzes blijven bronhoudend in het popupregister en popup-themes.
| PopupKey | Gebruik |
|---|---|
| POP-BEH-CAT-EDIT-CONFIRM | Bevestiging van inhoudelijke categoriewijziging met verplichte reden. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Document | Afleiding |
|---|---|
| Functioneel Ontwerp | Beheer kan naam, kleur en icoon van centrale categorieën wijzigen met bevestiging en reden. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, databaseontwerp en historie en background jobs beschrijven de technische uitwerking. Wijzigingen worden transactioneel opgeslagen met CategoryHistory per gewijzigd veld. |
| Software Requirements Specification | SRS moet unieke naam, geldig kleurformaat, geldige iconkey en verplichte reden afdwingen. |
| Database | Gebruikt Categories en CategoryHistory; geen wijziging aan TeacherLevelCategories of ExerciseRuns. |
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-003-REQ-001 | SRS-CAT-002 SRS-ADM-001 AC-CAT-002 AC-ADM-001 | Beheerders toestaan naam, kleur en icoon van een centrale categorie te wijzigen |
UC-BEH-CAT-003-REQ-002 | SRS-ADM-001 AC-ADM-001 | Vóór opslaan een bevestiging met verplichte reden vragen |
UC-BEH-CAT-003-REQ-003 | SRS-CAT-001 SRS-ADM-001 AC-CAT-001 AC-ADM-001 | Categorienaam uniek houden binnen actieve categorieën |
UC-BEH-CAT-003-REQ-004 | SRS-ADM-001 AC-ADM-001 | ColorHex valideren op #RRGGBB-formaat |
UC-BEH-CAT-003-REQ-005 | SRS-ADM-001 AC-ADM-001 | IconKey valideren tegen de toegestane iconset |
UC-BEH-CAT-003-REQ-006 | SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-001 AC-NFR-AUD-001 | Per gewijzigd veld een CategoryHistory-record vastleggen |
UC-BEH-CAT-003-REQ-007 | SRS-CAT-004 SRS-LRN-009 SRS-SHR-008 SRS-ADM-001 AC-CAT-004 AC-LRN-009 AC-SHR-008 AC-ADM-001 | Historische exercise runs en gedeelde oefening-snapshots niet herschrijven door een categoriewijziging |
UC-BEH-CAT-003-REQ-008 | SRS-ADM-001 SRS-NFR-SEC-001 AC-ADM-001 AC-NFR-SEC-001 | Gelijktijdige wijzigingen veilig detecteren of afhandelen |