UC-BEH-CAT-002 — Categoriebeheer openen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-CAT-002 |
| Naam | Categoriebeheer openen |
| 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-003, 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 | Niet van toepassing |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Deze usecase beschrijft hoe een beheerder vanuit het categorieoverzicht de detail- en beheerweergave van precies één geselecteerde centrale categorie opent.
De beheerweergave bevat minimaal de onderdelen Intro / uitleg, Categorie, Migreren naar en Geschiedenis. De geselecteerde categorie is het centrale object van de pagina; alle acties binnen de pagina worden server-side tegen deze CategoryId gevalideerd.
De Intro / uitleg toont een samenvatting van gebruik en impact, inclusief actieve docentniveaus, actieve oefenkoppelingen, aanmaakinformatie en laatste wijzigingsinformatie.
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:
- Openen van de detail- en beheerweergave voor één categorie.
- Laden van categorie-identiteit, impact, aanmaakinformatie en laatste wijziging.
- Tonen van tabs of secties Intro / uitleg, Categorie, Migreren naar en Geschiedenis.
- Bepalen welke vervolgacties beschikbaar of geblokkeerd zijn.
- Veilig omgaan met verlopen of ongeldige categorieselecties.
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.
- Categoriegegevens opslaan; dit hoort bij UC-BEH-CAT-003.
- Migratie daadwerkelijk uitvoeren; dit hoort bij UC-BEH-CAT-006.
- Volledige historylijst tonen; dit hoort bij UC-BEH-CAT-007.
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 | Er is één CategoryId geselecteerd vanuit het categorieoverzicht. |
| PRE-006 | Het geselecteerde Categories-record bestaat op het moment van openen. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | De beheerder ziet de beheerweergave voor precies één categorie. |
| POST-002 | De broncategorie voor migratievoorbereiding is vastgelegd door de geopende categoriecontext. |
| POST-003 | Beschikbare acties zijn afgestemd op status en gebruiksimpact. |
| POST-004 | Geen categoriegegevens zijn gewijzigd. |
| POST-005 | Geen migratie of historymutatie is aangemaakt. |
6. Trigger
De usecase start wanneer de beheerder in het categorieoverzicht een categorie selecteert en Open beheer kiest.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Overzicht | Kiest Open beheer voor een geselecteerde categorie. | De frontend vraagt de detailcontext op. | CategoryId uit geselecteerde regel. |
| 2 | Backend | Autorisatiecomponent | Controleert beheerdercontext. | Alleen een actieve beheerder mag de detailweergave openen. | Server-side autorisatie. |
| 3 | Backend | Categoriequery | Valideert dat CategoryId bestaat. | Ongeldige of verwijderde routecontext wordt veilig afgehandeld. | Categories.Id. |
| 4 | Backend | Detailreadmodel | Laadt categorie-identiteit. | Naam, kleur, icoon, status, CreatedAtUtc en UpdatedAtUtc worden beschikbaar. | Categories. |
| 5 | Backend | Impactreadmodel | Laadt gebruiksimpact. | Actieve docentniveaus en actieve oefenkoppelingen worden berekend. | TeacherLevelCategories en TeacherLevelCategoryExercises. |
| 6 | Frontend | Beheerweergave | Toont Intro / uitleg, Categorie, Migreren naar en Geschiedenis. | Elke sectie werkt vanuit dezelfde servergevalideerde CategoryId. | Detailcontext. |
| 7 | Frontend | Actiestatus | Bepaalt welke acties zichtbaar of uitgeschakeld zijn. | Status wijzigen wordt geblokkeerd bij actieve koppelingen; migreren vereist actieve broncontext. | Business rules. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | Geen categorie geselecteerd. | Open beheer blijft niet beschikbaar of de backend weigert de aanvraag. | Niet van toepassing. | Geen. |
| ALT-002 | 2 | Gebruiker is geen beheerder. | De backend weigert toegang. | Niet van toepassing. | Geen. |
| ALT-003 | 3 | CategoryId bestaat niet. | De gebruiker keert terug naar het overzicht met veilige niet-beschikbaarafhandeling. | Niet van toepassing. | Geen. |
| ALT-004 | 5 | Impactreadmodel kan niet volledig worden samengesteld. | De beheerweergave toont de categorie niet als veilig wijzigbaar totdat impact bekend is. | Niet van toepassing. | Geen. |
| ALT-005 | 7 | Categorie heeft actieve koppelingen. | Statuswijziging naar niet-kiesbaar wordt zichtbaar geblokkeerd. | Niet van toepassing. | Geen. |
9. Business rules
| ID | Business rule |
|---|---|
| BR-001 | Een beheerweergave heeft altijd precies één centrale categorie als context. |
| BR-002 | Het onderdeel Migreren naar gebruikt de geopende categorie als vaste broncategorie. |
| BR-003 | Acties worden niet alleen in de frontend uitgeschakeld maar server-side opnieuw gecontroleerd. |
| BR-004 | De detailweergave combineert beheerbare categorie-identiteit met read-only impactinformatie. |
| BR-005 | Actieve koppelingen bepalen of statuswijziging toegestaan is. |
| BR-006 | De detailweergave is geen docentniveau- of oefeningeditor. |
| BR-007 | Aanmaakinformatie en laatste wijzigingsinformatie worden getoond voor beheerbaarheid en auditcontext. |
10. Datavalidatie
| ID | Validatie |
|---|---|
| VAL-001 | CategoryId is verplicht en moet bestaan. |
| VAL-002 | De actieve gebruiker moet op het moment van openen beheerder zijn. |
| VAL-003 | Impactwaarden moeten server-side worden berekend. |
| VAL-004 | Actiestatussen mogen niet uit querystring of clientstate worden afgeleid. |
| VAL-005 | Een soft-deleted categorie mag nog geopend worden voor historie en herstelanalyse. |
| VAL-006 | De broncategorie voor migratie mag na openen niet door een verborgen formulierwaarde worden vervangen. |
11. Datamutaties en events
| ID | Mutatie / event | Toelichting |
|---|---|---|
| MUT-001 | Geen functionele mutatie | Openen van detailbeheer wijzigt geen categorie. |
| MUT-002 | Geen domeinevent | Openen van een beheerweergave wordt niet als CategoryHistory of ander domeinevent vastgelegd. |
12. Geen datamutaties
| ID | Geen mutatie | Reden |
|---|---|---|
| NO-001 | Categories | Geen veld van de categorie wordt gewijzigd. |
| NO-002 | CategoryHistory | Openen van een detailpagina is geen beheerwijziging. |
| NO-003 | CategoryMigrations | Er wordt geen migratie voorbereid of uitgevoerd. |
| NO-004 | TeacherLevelCategories | Koppelingen blijven ongewijzigd. |
| NO-005 | TeacherLevelCategoryExercises | Onderliggende oefenkoppelingen blijven ongewijzigd. |
13. State diagram
Niet van toepassing. Deze usecase opent een detailcontext en wijzigt geen persistent statusobject. Beschikbare vervolgacties worden afgeleid uit actuele categorie- en impactdata.
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 | De beheerpagina werkt als tweestapsflow: eerst selecteren, daarna beheren. |
| Technisch Ontwerp | Technisch Ontwerp: oefencatalogus, databaseontwerp en historie en background jobs beschrijven de technische uitwerking. De detailcontext moet server-side vanuit CategoryId worden geladen en niet uit clientstate worden vertrouwd. |
| Software Requirements Specification | SRS moet eisen dat acties per status en impact opnieuw server-side worden gecontroleerd. |
| Database | Categories, TeacherLevelCategories, TeacherLevelCategoryExercises en CategoryHistory leveren de getoonde context. |
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-002-REQ-001 | SRS-AUTH-004 SRS-CAT-006 SRS-ADM-001 AC-AUTH-004 AC-CAT-006 AC-ADM-001 | Detailbeheer openen voor precies één geselecteerde categorie |
UC-BEH-CAT-002-REQ-002 | SRS-CAT-001 SRS-ADM-006 SRS-ADM-001 SRS-NFR-AUD-001 AC-CAT-001 AC-ADM-006 AC-ADM-001 AC-NFR-AUD-001 | De onderdelen Intro / uitleg, Categorie, Migreren naar en Geschiedenis tonen |
UC-BEH-CAT-002-REQ-003 | SRS-ADM-001 AC-ADM-001 | Aanmaakinformatie en laatste wijzigingsinformatie tonen |
UC-BEH-CAT-002-REQ-004 | SRS-CAT-001 SRS-TCH-002 SRS-ADM-001 AC-CAT-001 AC-TCH-002 AC-ADM-001 | Actieve docentniveaus en actieve oefenkoppelingen als impact tonen |
UC-BEH-CAT-002-REQ-005 | SRS-AUTH-001 SRS-ADM-001 AC-AUTH-001 AC-ADM-001 | Status- en migratieacties blokkeren wanneer server-side voorwaarden niet geldig zijn |
UC-BEH-CAT-002-REQ-006 | SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-001 AC-NFR-AUD-001 | Bij openen van detailbeheer geen CategoryHistory of CategoryMigrations aanmaken |
UC-BEH-CAT-002-REQ-007 | SRS-ADM-001 SRS-NFR-SEC-001 AC-ADM-001 AC-NFR-SEC-001 | Verlopen of ongeldig geworden CategoryId veilig afhandelen |