UC-BEH-POP-004 — Popupwijziging valideren en opslaan
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-BEH-POP-004 |
| Naam | Popupwijziging valideren en opslaan |
| Domein | Beheerder / Popupbeheer |
| Primaire actor | Beheerder |
| Secundaire actor(en) | Frontend, backend, autorisatiecomponent, database, historyservice |
| Rolcontext | Actieve beheerdercontext; combinatierollen geven geen extra rechten binnen popupbeheer |
| Betrokken schermen | Site Instellingen > Popups beheren |
| Gerelateerde usecases | UC-BEH-POP-002, UC-BEH-POP-003, UC-BEH-POP-005, UC-BEH-POP-006 |
| Primaire entiteiten | PopupDetails, PopupDetailsHistory, PopupDetailsHistoryItems |
| Secundaire entiteiten / events | PopupType, PopupVariant, PopupInputType, ButtonTheme, Users, popup-register, popup-themes |
| Gerelateerde popups | POP-BEH-GEN-SAVE-FAILED, POP-BEH-GEN-VALIDATION-FAILED |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must |
2. Omschrijving
Het systeem valideert een popupwijziging server-side en slaat uitsluitend toegestane beheerbare velden op. Bij succesvolle opslag worden het popuprecord en de wijzigingsgeschiedenis in één samenhangende verwerking bijgewerkt.
Popupbeheer is geen vrije popupbuilder. Het beheer werkt binnen bestaande popuprecords en respecteert de scheiding tussen beheerbare inhoud en codegedreven structuur. Popupteksten, knopteksten, acties, inputvelden en themekeuzes worden niet in usecases gedupliceerd.
3. Scope
Deze usecase beschrijft:
- Ontvangen van een wijzigingspayload uit de popupeditor.
- Server-side autorisatie, recordcontrole, veldrechtencontrole en concurrencycontrole.
- Valideren van titel, tekst, knopteksten, inputlabel, custombeperkingen en read-only velden.
- Atomair opslaan van toegestane beheerbare velden.
- Vastleggen van historymoment en veldniveauverschillen.
- Teruggeven van actuele opgeslagen waarden aan de beheerinterface.
Deze usecase beschrijft niet:
- Nieuwe popuprecords aanmaken via de GUI.
- Popuprecords verwijderen of deactiveren via de GUI.
PopupKey,Variant,ThemeKey, knopacties ofCustomRendererKeywijzigen.- Popup-themes beheren.
- Runtime bepalen wanneer popups in gebruikersflows verschijnen.
- Popupteksten of knopteksten buiten het popupregister dupliceren.
- Onderliggende code, migraties of seeddefinities wijzigen via de beheerinterface.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is ingelogd en heeft een actief intern OefenHub-account. |
| PRE-002 | De gebruiker heeft server-side een actieve beheerderrol. |
| PRE-003 | De route of actie ligt binnen Site Instellingen > Popups beheren. |
| PRE-004 | De frontend gebruikt actuele serverrespons en vertrouwt niet op oude clientstate. |
| PRE-005 | Popupregister en popup-themes zijn als bronafspraak beschikbaar voor interpretatie van popuprecords. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Bij succesvolle validatie zijn uitsluitend beheerbare velden in PopupDetails gewijzigd. |
| POST-002 | Bij succesvolle opslag zijn UpdatedAtUtc, UpdatedByUserId en historygegevens vastgelegd. |
| POST-003 | Bij validatie-, concurrency- of historyfouten is geen gedeeltelijke wijziging opgeslagen. |
| POST-004 | Technische sleutels, variant, theme, knopacties en rendererkeys zijn ongewijzigd gebleven. |
| POST-005 | De beheerinterface toont actuele opgeslagen waarden of veldspecifieke foutinformatie. |
6. Trigger
De beheerder kiest Opslaan na het wijzigen van beheerbare popupvelden.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Beheerder | Popupeditor | Kiest Opslaan. | Frontend stuurt wijzigingspayload met recordversie. | UC-BEH-POP-003. |
| 2 | Backend | Autorisatiecomponent | Controleert actieve beheerdercontext. | Zonder beheerderrol stopt verwerking. | Server-side verplicht. |
| 3 | Backend | Popupservice | Laadt actuele recordversie. | Systeem controleert bestaan en concurrency. | PopupDetails. |
| 4 | Backend | Validatieservice | Controleert dat alleen beheerbare velden zijn gewijzigd. | Read-only wijzigingen worden geweigerd. | PopupKey, Variant, ThemeKey, acties, renderer. |
| 5 | Backend | Validatieservice | Controleert lengtes, lege waarden, inputlabel en custombeperkingen. | Fouten worden veldspecifiek teruggegeven. | Titel, tekst, knoptekst, inputlabel. |
| 6 | Backend | Domeinservice | Past toegestane wijzigingen toe. | PopupDetails krijgt nieuwe beheerbare waarden. | Update. |
| 7 | Backend | Historyservice | Registreert historymoment en veldverschillen. | Wijziging is auditbaar. | PopupDetailsHistory, PopupDetailsHistoryItems. |
| 8 | Backend | Transactie | Rondt atomair af. | Bij fout wordt alles teruggedraaid. | Geen gedeeltelijke opslag. |
| 9 | Backend | Frontend | Levert opgeslagen record en eventuele bevestigingsstatus. | Frontend toont actuele waarden. | Readmodelverversing. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 2 | Geen actieve beheerderrol. | Backend blokkeert de opslag. | Inline toegang geweigerd of veilige redirect. | Geen. |
| ALT-002 | 3 | Record bestaat niet. | Opslaan wordt geweigerd. | Inline niet-beschikbaarmelding. | Geen. |
| ALT-003 | 3 | Recordversie is verouderd. | Opslaan wordt geblokkeerd; actuele waarden moeten opnieuw worden geladen. | Inline conflictmelding. | Geen. |
| ALT-004 | 4 | Payload bevat wijziging aan read-only veld. | Backend weigert de opslag. | POP-BEH-GEN-VALIDATION-FAILED of inline fout. | Geen. |
| ALT-005 | 5 | Titel, tekst, knoptekst of inputlabel is ongeldig. | Opslaan wordt geweigerd met veldfouten. | POP-BEH-GEN-VALIDATION-FAILED. | Geen. |
| ALT-006 | 5 | Niet-custom popup probeert afwijkende layout of meerdere inputvelden te krijgen. | Opslaan wordt geblokkeerd. | Inline validatie. | Geen. |
| ALT-007 | 7 | Historyregistratie faalt. | De hele transactie wordt teruggedraaid. | POP-BEH-GEN-SAVE-FAILED. | Geen blijvende mutatie. |
| ALT-008 | 8 | Databaseactie faalt technisch. | Geen gedeeltelijke opslag; veilige foutmelding. | POP-BEH-GEN-SAVE-FAILED. | Geen of rollback. |
9. Business rules
| ID | Regel |
|---|---|
| BR-UC-BEH-POP-004-001 | Opslaan is alleen toegestaan voor bestaande popuprecords. |
| BR-UC-BEH-POP-004-002 | De backend valideert alle veldrechten opnieuw, ongeacht frontendgedrag. |
| BR-UC-BEH-POP-004-003 | Read-only technische velden mogen niet gewijzigd worden. |
| BR-UC-BEH-POP-004-004 | Niet-custom popups mogen niet via beheer tot afwijkende layouts worden omgebogen. |
| BR-UC-BEH-POP-004-005 | Iedere succesvolle wijziging registreert history met actor, UTC-tijdstip en veldverschillen. |
| BR-UC-BEH-POP-004-006 | Recordupdate en historyregistratie vormen één atomair geheel. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Beheerdercontext | Server-side actieve beheerderrol verplicht. |
| Popuprecord | Het record moet bestaan en als bestaand popuprecord bekend zijn. |
| PopupKey | Moet bestaan en blijft read-only. |
| Variant | Moet een bekende PopupVariant zijn en blijft read-only. |
| ThemeKey | Blijft read-only en moet verwijzen naar een bestaande themedefinitie. |
| Knopacties | ActionCallMethod en technische actie-identifiers zijn read-only. |
| CustomRendererKey | Alleen relevant bij Custom-popups en blijft read-only. |
| Titel | Maximaal 50 tekens wanneer beheerbaar. |
| Tekst | Maximaal 1000 tekens wanneer beheerbaar. |
| Knoptekst | Maximaal 20 tekens per zichtbare knop wanneer beheerbaar. |
| Inputlabel | Alleen beheerbaar wanneer de bestaande variant een inputveld ondersteunt. |
| Rendering | Beheerbare tekst mag geen actieve of onveilige inhoud veroorzaken. |
| Tijdstip | Wijzigingsmomenten worden in UTC vastgelegd. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 6 | Update | PopupDetails | Alleen beheerbare velden worden bijgewerkt, inclusief UpdatedAtUtc en UpdatedByUserId. |
| 7 | Insert | PopupDetailsHistory | Eén historymoment voor de opslaanactie. |
| 7 | Insert | PopupDetailsHistoryItems | Veldniveauverschillen voor gewijzigde beheerbare velden. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
| PopupKey, Variant, ThemeKey, ActionCallMethod en CustomRendererKey | Blijven read-only en codegedreven. |
| Popupregister en popup-themes | Ontwerpbronnen blijven bronhoudend en worden niet door de opslagactie aangepast. |
| Nieuwe popuprecords | Nieuwe definities ontstaan alleen via code en migraties. |
| Popupdefinities verwijderen of deactiveren | Geen GUI-functie binnen popupbeheer. |
| Runtime gebruikersdata | Oefenruns, meldingen, relaties, berichten en accounts worden niet gewijzigd. |
13. State diagram
14. Decision flow
15. Data lifecycle diagram
16. Sequence diagrammen
17. Popupverwijzingen
Usecases verwijzen alleen naar PopupKey. Popupteksten, knopteksten, acties, inputvelden en themakeuzes worden centraal beheerd in het popupregister en de popup-themes.
| PopupKey | Moment | Doel |
|---|---|---|
| POP-BEH-GEN-VALIDATION-FAILED | Wanneer servervalidatie de wijziging blokkeert. | Aangeven dat veldfouten in het formulier gecorrigeerd moeten worden. |
| POP-BEH-GEN-SAVE-FAILED | Wanneer opslag of historyregistratie technisch faalt. | Veilige foutmelding zonder interne details. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Beschrijft welke popupvelden beheerbaar zijn, welke velden read-only blijven en hoe de beheerder bestaande popuprecords raadpleegt of wijzigt. |
| Technisch Ontwerp | Technisch Ontwerp: domeinmodel en admin-eigenaarschap, databaseontwerp en frontendcompositie beschrijven de technische uitwerking. Beschrijf server-side autorisatie, readmodelopbouw, commandverwerking en historyregistratie, inclusief bescherming van technische sleutels en codegedreven velden. |
| Software Requirements Specificatie | Beschrijft requirements voor toegangscontrole, validatiegrenzen, veilige foutafhandeling, immutable history en de scheiding tussen beheerbare tekst en technische popupdefinities. |
| Database-informatie | Controleer aansluiting van PopupDetails, PopupDetailsHistory en PopupDetailsHistoryItems, inclusief veldlengtes, concurrency en auditvelden. |
| Ontwerpbronnen en registers | Houd popupregister, popup-themes, autorisatiematrix, usecase-popup-matrix en usecase-requirement-matrix consistent met deze usecase. |
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-BEH-POP-004-001 | SRS-ADM-002 SRS-ADM-001 AC-ADM-002 AC-ADM-001 | De actie uitsluitend toestaan aan gebruikers met een actieve beheerderrol |
REQ-UC-BEH-POP-004-002 | SRS-AUTH-001 SRS-AUTH-002 SRS-ADM-002 SRS-ADM-001 AC-AUTH-001 AC-AUTH-002 AC-ADM-002 AC-ADM-001 | Alle beheerautorisatie server-side controleren en mag niet vertrouwen op clientstate of routeparameters |
REQ-UC-BEH-POP-004-003 | SRS-AUTH-004 SRS-ACC-003 SRS-ACC-005 SRS-ADM-001 SRS-POP-001 SRS-NFR-SEC-001 AC-AUTH-004 AC-ACC-003 AC-ACC-005 AC-ADM-001 AC-POP-001 AC-NFR-SEC-001 | Onbekende, ontbrekende of niet-toegankelijke popuprecords veilig afhandelen zonder technische details te tonen |
REQ-UC-BEH-POP-004-004 | SRS-ADM-001 SRS-POP-001 AC-ADM-001 AC-POP-001 | PopupKey, Variant, ThemeKey, knopacties en CustomRendererKey read-only houden in de beheerinterface |
REQ-UC-BEH-POP-004-005 | SRS-ADM-001 SRS-POP-001 AC-ADM-001 AC-POP-001 | Popupteksten, knopteksten, inputlabels en themekeuzes niet dupliceren buiten het centrale popupregister en popup-themes |
REQ-UC-BEH-POP-004-006 | SRS-AUTH-001 SRS-ADM-001 AC-AUTH-001 AC-ADM-001 | Wijzigingen pas opslaan nadat server-side validatie van record, veldrechten, lengtes, concurrency en custombeperkingen is geslaagd |
REQ-UC-BEH-POP-004-007 | SRS-ADM-001 SRS-NFR-AUD-001 AC-ADM-001 AC-NFR-AUD-001 | Uitsluitend beheerbare velden opslaan en iedere wijziging auditbaar vastleggen met actor, UTC-tijdstip en veldverschillen |
REQ-UC-BEH-POP-004-008 | SRS-SHR-001 SRS-ADM-001 SRS-NFR-AUD-001 AC-SHR-001 AC-ADM-001 AC-NFR-AUD-001 | Bij validatie-, concurrency- of historyfouten geen gedeeltelijke wijziging opslaan |
REQ-UC-BEH-POP-004-009 | SRS-ADM-001 AC-ADM-001 | Titel, tekst, knopteksten en inputlabels valideren op de vastgestelde maximale lengtes wanneer deze velden beheerbaar zijn |
REQ-UC-BEH-POP-004-010 | SRS-ADM-001 SRS-POP-001 AC-ADM-001 AC-POP-001 | De usecase Popupwijziging valideren en opslaan uitvoeren binnen de afbakening van Beheerder / Popupbeheer |