UC-GEN-MSG-005 — Privéberichtthread verwijderen
1. Kerngegevens
| Veld | Waarde |
|---|---|
| Usecase-ID | UC-GEN-MSG-005 |
| Naam | Privéberichtthread verwijderen |
| Domein | Berichten |
| Primaire actor | Ingelogde gebruiker |
| Secundaire actor(en) | Systeem, andere deelnemer(s) aan de privéberichtthread, autorisatiecomponent, realtime notificatiecomponent |
| Rolcontext | Iedere ingelogde rolcontext waarvoor de gebruiker toegang heeft tot het berichtenoverzicht; verwijderen is uitsluitend toegestaan voor privéberichtthreads waarin de gebruiker participant is |
| Betrokken schermen | SCH-GEN-02 — Berichtenoverzicht, SCH-GEN-04 — Open bericht |
| Gerelateerde usecases | UC-GEN-MSG-001 — Berichtenoverzicht bekijken; UC-GEN-MSG-003 — Bericht openen; UC-GEN-MSG-002 — Privébericht opstellen en verzenden; UC-GEN-MSG-004 — Bericht beantwoorden |
| Primaire entiteiten | PrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages |
| Secundaire entiteiten / events | participant-readstate/readmodel, PrivateMessageThreadEvents, PrivateMessageThreadRemovedFromMailbox, MessageUnreadCountChanged, PrivateMessageThreadDeleteFailed |
| Gerelateerde popups | POP-GEN-MSG-DELETE-CONFIRM, POP-GEN-MSG-NOT-AVAILABLE, POP-GEN-MSG-DELETED, POP-GEN-MSG-DELETE-FAILED |
| Popupregister | Ontwerpbronnen — Popup-register |
| MoSCoW | Must have |
2. Omschrijving
De gebruiker verwijdert een privéberichtthread uit de eigen mailboxweergave. De handeling verwijdert de thread niet voor andere deelnemers en verwijdert ook geen individuele PrivateMessages-records uit de database. Functioneel betekent verwijderen dat de eigen participantregel zodanig wordt gemarkeerd dat de thread niet langer in het eigen berichtenoverzicht verschijnt en niet langer meetelt in de eigen mailbox- en ongelezentellers.
De usecase geldt uitsluitend voor privéberichtthreads. Systeemberichten blijven niet-verwijderbaar en tonen in het overzicht alleen een uitgeschakelde verwijderactie of gelijkwaardige toelichting. Verwijderen van een privéthread vraagt altijd een expliciete bevestiging voordat de mutatie wordt uitgevoerd.
De backend voert de objectcontrole server-side uit. Een routeparameter, lijstregel of frontendstatus is nooit voldoende bewijs dat de gebruiker de thread mag verwijderen. De gebruiker mag uitsluitend de eigen PrivateMessageThreadParticipants-context aanpassen; participantregels van andere deelnemers, eerdere berichten, systeemberichten, relatiegegevens en thread-events blijven ongewijzigd.
3. Scope
Deze usecase beschrijft:
- het starten van de verwijderactie vanuit het berichtenoverzicht;
- het starten van dezelfde verwijderactie vanuit de open privéthreadweergave;
- het onderscheid tussen privéthread verwijderen en systeembericht niet-verwijderbaar tonen;
- de bevestigingsstap vóór de mutatie;
- server-side controle op authenticatie, participantcontext, objecttype en mailboxstatus;
- het participantgebonden verwijderen van de thread uit de eigen mailboxweergave;
- het opnieuw bepalen van de eigen berichtenlijst, samenvattingsaantallen en ongelezenbadge;
- het onveranderd laten van de thread voor andere deelnemers;
- het onveranderd laten van bestaande berichtinhoud, thread-events en systeemberichten;
- foutpaden voor niet-bestaande, al verwijderde, niet-geautoriseerde of technisch niet verwijderbare threads;
- popupverwijzingen naar centrale popupkeys.
Deze usecase beschrijft niet:
- het hard verwijderen van privéberichten uit de database;
- het verwijderen van systeemberichten;
- het verlaten van een groepsgesprek als aparte participantactie;
- het beantwoorden of aanmaken van privéberichten;
- het markeren als gelezen of ongelezen;
- het verwerken van retentie of automatische cleanup;
- het verwijderen van een account, relatie of melding;
- het beheer van popupteksten, knopteksten of popup-themes.
4. Pre-condities
| ID | Voorwaarde |
|---|---|
| PRE-001 | De gebruiker is ingelogd. |
| PRE-002 | De gebruiker bevindt zich in het berichtenoverzicht of in de open detailweergave van een privéberichtthread. |
| PRE-003 | De geselecteerde regel of detailweergave verwijst naar een PrivateMessageThreads-context en niet naar een SystemMessages-record. |
| PRE-004 | De backend kan een PrivateMessageThreadParticipants-record bepalen voor de combinatie van de ingelogde gebruiker en de geselecteerde thread. |
| PRE-005 | De thread is voor de ingelogde gebruiker nog niet uit de eigen mailboxweergave verwijderd. |
| PRE-006 | Het systeem kan de verwijdermutatie en tellerherberekening transactioneel of consistent verwerken. |
| PRE-007 | De relevante popupdefinities zijn via het popupregister beschikbaar als codegedreven popupkeys. |
5. Post-condities
| ID | Resultaat |
|---|---|
| POST-001 | Bij annuleren blijft de privéthread zichtbaar voor de gebruiker en wordt geen datamutatie uitgevoerd. |
| POST-002 | Bij succesvol verwijderen is de eigen participantregel gemarkeerd als verwijderd uit de mailboxweergave. |
| POST-003 | De privéthread verschijnt niet langer in het eigen berichtenoverzicht van de gebruiker. |
| POST-004 | De privéthread telt niet langer mee in de eigen privéberichtenteller, zoekresultaten, filterresultaten of ongelezenbadge. |
| POST-005 | Bestaande PrivateMessages-records blijven bestaan. |
| POST-006 | De privéthread blijft zichtbaar en beantwoordbaar voor andere deelnemers zolang hun eigen participantcontext dat toestaat. |
| POST-007 | Participantregels van andere deelnemers worden niet gewijzigd. |
| POST-008 | Er wordt geen systeembericht aangemaakt voor het verwijderen uit de eigen mailbox. |
| POST-009 | Bij technische of autorisatiegerelateerde fout wordt geen gedeeltelijke mutatie doorgevoerd. |
| POST-010 | Bij een reeds verwijderde of niet meer beschikbare thread wordt de eigen lijstcontext ververst en wordt geen tweede verwijdermutatie uitgevoerd. |
| POST-011 | Als uiteindelijk geen enkele deelnemer de thread nog functioneel zichtbaar heeft, mag de thread administratief als gesloten of cleanup-kandidaat worden beschouwd zonder dat deze gebruikersactie berichten hard verwijdert. |
6. Trigger
De usecase start wanneer de gebruiker in SCH-GEN-02 — Berichtenoverzicht de contextactie Gesprek verlaten kiest bij een privéberichtthread, of wanneer de gebruiker in SCH-GEN-04 — Open bericht dezelfde verwijderactie kiest voor de geopende privéthread.
7. Normale processtroom
| Stap | Actor | Scherm / component | Actie | Systeemrespons | Data / regel |
|---|---|---|---|---|---|
| 1 | Gebruiker | SCH-GEN-02 — Berichtenoverzicht of SCH-GEN-04 — Open bericht | Kiest Gesprek verlaten bij een privéberichtthread. | Het systeem start de verwijderflow. | De actie is alleen actief voor privéthreads. |
| 2 | Systeem | Frontend | Bepaalt de geselecteerde threadreferentie en toont een bevestigingspopup. | POP-GEN-MSG-DELETE-CONFIRM wordt geopend. | Popupinhoud staat centraal in het popupregister. |
| 3 | Gebruiker | Popup | Bevestigt de verwijderactie. | De frontend stuurt een verwijdercommand naar de backend. | Annuleren beëindigt de flow zonder mutatie. |
| 4 | Systeem | Backend | Controleert authenticatie. | Alleen ingelogde gebruikers mogen doorgaan. | Niet-ingelogde of verlopen sessies worden geblokkeerd. |
| 5 | Systeem | Backend | Controleert dat de opgegeven referentie een privéthread is. | Systeemberichten of onbekende objecttypen worden niet verwijderd. | SystemMessages zijn niet-verwijderbaar. |
| 6 | Systeem | Backend | Laadt de participantregel voor de ingelogde gebruiker. | Alleen bij geldige participantcontext wordt de mutatie voorbereid. | PrivateMessageThreadParticipants.UserId = huidige gebruiker. |
| 7 | Systeem | Backend | Controleert of de thread voor deze gebruiker nog zichtbaar is. | Bij reeds verwijderde thread wordt geen dubbele mutatie uitgevoerd. | DeletedAtUtc of gelijkwaardige mailboxverwijdering moet leeg zijn. |
| 8 | Systeem | Backend | Markeert de eigen participantregel als verwijderd uit de mailbox. | De thread wordt voor deze gebruiker uit de mailboxweergave gehaald. | Minimaal DeletedAtUtc en waar beschikbaar DeletedByUserId of actorcontext. |
| 9 | Systeem | Backend | Bepaalt of eigen ongelezenstatus en samenvattingsaantallen wijzigen. | De eigen tellers worden opnieuw afgeleid of het readmodel wordt bijgewerkt. | Verwijderde threads tellen niet langer mee voor de eigen mailbox. |
| 10 | Systeem | Backend | Legt de functionele gebeurtenis vast. | Event/logging wordt beschikbaar voor traceerbaarheid. | PrivateMessageThreadRemovedFromMailbox. |
| 11 | Systeem | Backend | Rondt de transactie af. | De backend geeft succes terug aan de frontend. | Geen mutatie aan berichten of andere deelnemers. |
| 12 | Systeem | Frontend | Verwijdert de threadregel uit het overzicht of navigeert terug naar het overzicht. | De gebruiker ziet de bijgewerkte mailboxcontext. | Vanuit detailweergave wordt niet op een niet-zichtbare thread blijven staan. |
| 13 | Systeem | Frontend / header | Werkt samenvattingsaantallen, filters, paginering en ongelezenbadge bij. | De eigen tellerwaarden sluiten weer aan op de server-side mailboxstatus. | Bij leerlingen tijdens actieve oefenrun blijft alleen de badge visueel verborgen; de onderliggende status is wel bijgewerkt. |
| 14 | Systeem | Popup / melding | Geeft terugkoppeling dat de thread uit de eigen mailbox is verwijderd. | POP-GEN-MSG-DELETED of gelijkwaardige succesfeedback wordt getoond. | De popuptekst wordt niet in de usecase gedupliceerd. |
8. Alternatieve en exceptionele processtromen
| ID | Vanaf stap | Situatie | Systeemgedrag | Popup / melding | Datamutatie |
|---|---|---|---|---|---|
| ALT-001 | 1 | De gebruiker probeert een systeembericht te verwijderen. | De verwijderactie is uitgeschakeld of wordt server-side geweigerd. | Tooltip of toelichting vanuit SCH-GEN-02; geen actieve verwijderpopup. | Geen. |
| ALT-002 | 2 | De bevestigingspopup kan niet worden geladen. | De verwijderactie wordt niet uitgevoerd. | Generieke foutmelding of geen vervolgactie. | Geen. |
| ALT-003 | 3 | De gebruiker kiest annuleren of sluit de bevestigingspopup. | De flow eindigt zonder opslag. | Geen of gesloten popup. | Geen. |
| ALT-004 | 4 | De sessie is verlopen. | Het verwijdercommand wordt geweigerd en de gebruiker moet opnieuw inloggen. | Sessiemelding volgens generiek authenticatiegedrag. | Geen. |
| ALT-005 | 5 | De threadreferentie bestaat niet of verwijst niet naar een privéthread. | Het systeem behandelt de referentie als niet beschikbaar voor deze gebruiker. | POP-GEN-MSG-NOT-AVAILABLE. | Geen. |
| ALT-006 | 6 | De gebruiker is geen participant van de thread. | De backend weigert toegang zonder inhoudelijke gegevens over de thread prijs te geven. | POP-GEN-MSG-NOT-AVAILABLE. | Geen. |
| ALT-007 | 7 | De thread is al eerder uit de eigen mailbox verwijderd. | De backend voert geen tweede mutatie uit en de frontend ververst de lijstcontext. | POP-GEN-MSG-DELETED. | Geen nieuwe mutatie. |
| ALT-008 | 8 | De thread bevat nog ongelezen berichten voor de gebruiker. | Verwijderen blijft toegestaan; de thread verdwijnt uit de eigen mailbox en telt niet langer mee als ongelezen. | POP-GEN-MSG-DELETED. | Eigen participantverwijdering; geen readstate-mutatie namens andere deelnemers. |
| ALT-009 | 8 | De thread is door retentie of beheerproces intussen niet meer functioneel beschikbaar. | De backend voert geen gebruikersmutatie uit en geeft niet-beschikbaarheid terug. | POP-GEN-MSG-NOT-AVAILABLE. | Geen. |
| ALT-010 | 8-11 | Database- of transactiefout tijdens verwijderen. | De volledige mutatie wordt teruggedraaid. | POP-GEN-MSG-DELETE-FAILED. | Geen gedeeltelijke mutatie. |
| ALT-011 | 9-13 | Herberekening van badge of samenvatting kan niet realtime worden afgeleverd. | De mailboxverwijdering blijft geldig; de teller wordt bij eerstvolgende laadactie opnieuw bepaald. | Geen blocking popup voor de gebruiker; technische logging. | Participantverwijdering blijft bestaan. |
| ALT-012 | 12 | De gebruiker verwijdert vanuit de detailweergave. | Na succesvolle verwijdering navigeert het systeem terug naar het overzicht of naar een veilige berichtenroute. | POP-GEN-MSG-DELETED. | Eigen participantverwijdering. |
| ALT-013 | 12 | Door verwijderen verandert de actuele pagina in het overzicht naar een lege pagina. | Het systeem toont de dichtstbijzijnde geldige pagina of een lege toestand binnen de actieve filters. | Geen extra popup nodig. | Geen aanvullende mutatie. |
| ALT-014 | 14 | De succespopup wordt niet getoond door navigatie of refresh. | De datamutatie blijft leidend; het overzicht toont de bijgewerkte toestand. | Geen. | Geen aanvullende mutatie. |
8.1 Verwijderen en toekomstige replies
Het verwijderen van een privéthread is participantgebonden. De thread verdwijnt uit de eigen mailbox, preview, ongelezenstatus en timelinevensters van de actor, maar blijft voor andere actieve deelnemers bestaan. Latere replies van andere deelnemers maken de verwijderde thread niet automatisch opnieuw zichtbaar voor de actor. Wil iemand opnieuw contact opnemen met een gebruiker die de thread voor zichzelf heeft verwijderd of verlaten, dan gebeurt dat via een nieuwe privéberichtthread.
9. Business rules
| ID | Regel |
|---|---|
| BR-UC-GEN-MSG-005-001 | Alleen privéberichtthreads mogen door een gebruiker uit de eigen mailboxweergave worden verwijderd. |
| BR-UC-GEN-MSG-005-002 | Systeemberichten zijn niet-verwijderbaar en mogen niet via een gebruikeractie worden verwijderd of verborgen. |
| BR-UC-GEN-MSG-005-003 | Verwijderen van een privéthread is participantgebonden en geldt uitsluitend voor de ingelogde gebruiker. |
| BR-UC-GEN-MSG-005-004 | Bestaande privéberichten worden niet hard verwijderd door deze usecase. |
| BR-UC-GEN-MSG-005-005 | De backend moet controleren dat de ingelogde gebruiker participant is van de thread voordat de mailboxverwijdering wordt uitgevoerd. |
| BR-UC-GEN-MSG-005-006 | Een reeds uit de eigen mailbox verwijderde thread mag niet opnieuw als actieve mailboxregel worden verwijderd. |
| BR-UC-GEN-MSG-005-007 | Verwijderde privéthreads tellen niet langer mee in de eigen berichtenlijst, zoekresultaten, filterresultaten, paginering, privéberichtenteller of ongelezenbadge. |
| BR-UC-GEN-MSG-005-008 | Verwijderen van een thread met ongelezen inhoud is toegestaan en verwijdert de thread uit de eigen ongelezenafleiding zonder de inhoud als gelezen voor andere deelnemers te markeren. |
| BR-UC-GEN-MSG-005-009 | Andere deelnemers behouden hun eigen zichtbaarheid, readstate en beantwoordbaarheid zolang hun eigen participantcontext dat toestaat. |
| BR-UC-GEN-MSG-005-010 | De verwijderactie mag geen mailbox-systeembericht naar andere deelnemers sturen, maar moet wel een thread-event ParticipantLeft toevoegen voor de bestaande threadtimeline. |
| BR-UC-GEN-MSG-005-011 | De verwijderactie moet vooraf door de gebruiker bevestigd worden. |
| BR-UC-GEN-MSG-005-012 | De mutatie aan de eigen participantregel en de herberekening of invalidatie van eigen tellerwaarden worden consistent verwerkt. |
| BR-UC-GEN-MSG-005-013 | Technische identifiers, stacktraces en interne foutdetails worden niet zichtbaar getoond bij foutpaden. |
| BR-UC-GEN-MSG-005-014 | Als alle deelnemers een thread uit hun eigen mailboxweergave hebben verwijderd, mag de thread administratief als gesloten of cleanup-kandidaat worden beschouwd, zonder dat deze gebruikersactie bestaande berichten hard verwijdert. |
| BR-UC-GEN-MSG-005-015 | Een latere nieuwe privécommunicatie met dezelfde gebruiker wordt via de normale opstel- of antwoordflow bepaald en mag niet vertrouwen op een door de gebruiker verwijderde mailboxweergave als actieve context. |
Centrale business rules die hierbij horen:
| BusinessRule-ID | Toepassing |
|---|---|
BR-GEN-SEC-001 | Alle berichtacties vereisen server-side rol-, relatie- of objectcontrole. |
BR-GEN-MSG-002 | Systeemberichten zijn niet-verwijderbaar door gebruikers. |
BR-GEN-MSG-004 | Gelezen- en ongelezenstatus wordt gebruiker- of participantgebonden bepaald. |
BR-GEN-MSG-003 | Verwijderen van een privéthread is participantgebonden en verwijdert de thread niet voor andere deelnemers. |
BR-GEN-MSG-018 | Gebruikersverwijdering van een privéthread is geen hard delete van berichtinhoud. |
BR-GEN-MSG-012 | Privéthreadweergaven mogen alleen berichten en thread-events uit dezelfde geautoriseerde thread tonen. |
10. Datavalidatie
| Veld / object | Validatie |
|---|---|
| Threadreferentie | Mag nooit als autorisatiebewijs worden gebruikt; server-side objectcontrole is verplicht. |
| Objecttype | Moet PrivateMessageThread zijn; SystemMessage is niet toegestaan voor verwijderen. |
PrivateMessageThreads.Id | Moet bestaan en gekoppeld zijn aan een participantregel voor de ingelogde gebruiker. |
PrivateMessageThreadParticipants.ThreadId | Moet overeenkomen met de geselecteerde thread. |
PrivateMessageThreadParticipants.UserId | Moet overeenkomen met de ingelogde gebruiker. |
PrivateMessageThreadParticipants.DeletedAtUtc | Moet leeg zijn voordat een actieve mailboxverwijdering wordt uitgevoerd. |
PrivateMessageThreadParticipants.DeletedByUserId of actorcontext | Wordt gevuld met de uitvoerende gebruiker wanneer deze kolom of actorregistratie beschikbaar is. |
DeletedAtUtc | Wordt opgeslagen in UTC. |
| Readstatevelden | Worden niet gebruikt als autorisatiebewijs en hoeven niet te worden overschreven om een thread te verwijderen. |
| Ongelezenafleiding | Moet verwijderde participantthreads uitsluiten. |
| Zoek- en filterdataset | Moet verwijderde participantthreads uitsluiten. |
| PopupKey | Moet bestaan in het popupregister en mag niet vanuit vrije gebruikersinput komen. |
| Foutmeldingen | Mogen geen technische identifiers, stacktraces of interne databasenaamgeving bevatten. |
11. Datamutaties en events
| Stap | Type | Entiteit / event | Mutatie |
|---|---|---|---|
| 1-2 | Read | PrivateMessageThreads, PrivateMessageThreadParticipants | Ophalen van de geselecteerde threadcontext voor het tonen van de bevestigingspopup. |
| 4-7 | Read | PrivateMessageThreads, PrivateMessageThreadParticipants, objectautorisatie | Controleren of de gebruiker de geselecteerde privéthread uit de eigen mailbox mag verwijderen. |
| 8 | Database | PrivateMessageThreadParticipants | DeletedAtUtc wordt gevuld voor de eigen participantregel; actorinformatie wordt vastgelegd waar het model dat ondersteunt. |
| 9 | Database / readmodel | participant-readstate/readmodel | Eigen mailbox-, filter- en ongelezenafleiding wordt opnieuw bepaald of geïnvalideerd. |
| 10 | Event | PrivateMessageThreadRemovedFromMailbox | Functionele gebeurtenis dat de thread voor één participant uit de mailboxweergave is verwijderd. |
| 13 | Event | MessageUnreadCountChanged | Eigen ongelezenteller kan opnieuw worden bepaald en naar de frontend worden gecommuniceerd. |
| ALT-010 | Event / logging | PrivateMessageThreadDeleteFailed | Verwijderactie is technisch mislukt of transactioneel teruggedraaid. |
12. Geen datamutaties
| Entiteit | Reden |
|---|---|
SystemMessages | Systeemberichten zijn niet-verwijderbaar door gebruikers. |
PrivateMessages | Bestaande berichtinhoud blijft intact en wordt niet hard verwijderd. |
PrivateMessageThreads | De threadcontainer blijft bestaan; alleen de eigen participantweergave wordt verwijderd. |
PrivateMessageThreadParticipants van andere deelnemers | Andere deelnemers behouden hun eigen mailboxweergave en readstate. |
PrivateMessageThreadEvents | Eerdere thread-events blijven intact; de eerste geldige verlaat-/verwijderactie voegt een ParticipantLeft-event toe voor achterblijvende deelnemers. |
Users | Gebruikersgegevens worden alleen gebruikt voor autorisatie en displaycontext. |
UserRelationships | Relaties worden niet aangemaakt, gewijzigd of beëindigd. |
SystemMessageTemplates | Er wordt geen systeembericht gegenereerd. |
Tickets | Verwijderen van een privéthread maakt geen melding of ticket aan. |
RelationshipInvitations | Verwijderen van een privéthread verwerkt geen relatie-uitnodiging. |
13. State diagram — participantgebonden mailboxzichtbaarheid
14. Decision flow — privéthread verwijderen
15. Data lifecycle diagram — eigen mailboxverwijdering
16. Sequence diagrammen
16.1 Privéthread verwijderen vanuit berichtenoverzicht
16.2 Privéthread verwijderen vanuit open bericht
16.3 Verwijdering geweigerd of mislukt
17. Popupverwijzingen
| PopupKey | Moment | Variant | Doel |
|---|---|---|---|
POP-GEN-MSG-DELETE-CONFIRM | Direct nadat de gebruiker Gesprek verlaten kiest bij een privéthread. | Confirm | Bevestigen dat de gebruiker het gesprek wil verlaten en uit de eigen mailboxweergave wil verwijderen. |
POP-GEN-MSG-NOT-AVAILABLE | Wanneer de te verwijderen privéthread niet bestaat, geen privéthread is, niet toegankelijk is of door retentie niet meer beschikbaar is. | InfoOnly | Duidelijk maken dat het gesprek niet beschikbaar is zonder technische details prijs te geven. |
POP-GEN-MSG-DELETED | Na succesvolle participantgebonden verwijdering of wanneer de eigen mailboxverwijdering al eerder succesvol is verwerkt. | InfoOnly | Terugkoppelen dat de thread niet langer beschikbaar is in de eigen mailboxweergave. |
POP-GEN-MSG-DELETE-FAILED | Wanneer de verwijderactie technisch of transactioneel mislukt. | InfoOnly | Duidelijk maken dat de verwijderactie niet is uitgevoerd. |
18. Afleiding naar Functioneel Ontwerp / Technisch Ontwerp / Software Requirements Specification
| Doeldocument | Afleiding |
|---|---|
| Functioneel Ontwerp | Het berichtenoverzicht en de open-berichtweergave moeten de verwijderactie alleen actief tonen voor privéthreads en nooit voor systeemberichten. De flow bevat een bevestigingsstap en werkt uitsluitend op de eigen mailboxweergave. |
| Functioneel Ontwerp | Na succesvol verwijderen verdwijnt de thread uit het eigen overzicht en worden filters, paginering, samenvattingskaarten en de ongelezenbadge opnieuw bepaald. |
| Functioneel Ontwerp | Vanuit de detailweergave mag de gebruiker na verwijderen niet op een niet-zichtbare thread blijven staan; navigatie gaat terug naar het overzicht of een veilige berichtenroute. |
| Technisch Ontwerp | Technisch Ontwerp: berichten, systeemberichten, notificaties en privéthreads verwerkt de verwijderactie als command en als command worden verwerkt met server-side authenticatie-, object- en participantcontrole. |
| Technisch Ontwerp | Technisch Ontwerp: berichten, systeemberichten, notificaties en privéthreads beschrijft dat de mutatie wordt vastgelegd op de eigen PrivateMessageThreadParticipants-regel, bijvoorbeeld via DeletedAtUtc en actorinformatie, zonder PrivateMessages of andere participantregels te wijzigen. |
| Technisch Ontwerp | Technisch Ontwerp: readmodels, tellers, badges, caching en materialisatie beschrijft dat mailboxqueries, zoekqueries, filters, paginering en ongelezenafleiding participantregels met mailboxverwijdering uitsluiten. |
| Technisch Ontwerp | Technisch Ontwerp: berichten, systeemberichten, notificaties en privéthreads beschrijft dat de commandafhandeling idempotent of veilig omgaan met herhaalde deletecommands voor al verwijderde threads. |
| Software Requirements Specification | De gebruiker moet een privéberichtthread uit de eigen mailboxweergave kunnen verwijderen na expliciete bevestiging. |
| Software Requirements Specification | Het systeem mag systeemberichten niet door gebruikers laten verwijderen. |
| Software Requirements Specification | Verwijderen van een privéthread mag geen berichtinhoud of zichtbaarheid voor andere deelnemers verwijderen. |
| Software Requirements Specification | De eigen mailbox- en ongelezentellers moeten na verwijderen opnieuw correct worden weergegeven. |
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-GEN-MSG-005-001 | SRS-MSG-003 AC-MSG-003 | De verwijderactie alleen beschikbaar maken voor privéberichtthreads en niet voor systeemberichten |
REQ-UC-GEN-MSG-005-002 | SRS-MSG-003 SRS-POP-001 AC-MSG-003 AC-POP-001 | Vóór het verwijderen van een privéthread een bevestigingspopup tonen |
REQ-UC-GEN-MSG-005-003 | SRS-AUTH-001 SRS-MSG-003 AC-AUTH-001 AC-MSG-003 | Server-side controleren dat de ingelogde gebruiker participant is van de te verwijderen privéthread |
REQ-UC-GEN-MSG-005-004 | SRS-MSG-003 AC-MSG-003 | Verwijderen verwerken als participantgebonden mailboxverwijdering voor de ingelogde gebruiker |
REQ-UC-GEN-MSG-005-005 | SRS-MSG-003 AC-MSG-003 | Bij deze verwijderactie geen PrivateMessages-records hard verwijderen |
REQ-UC-GEN-MSG-005-006 | SRS-MSG-003 AC-MSG-003 | Participantregels, readstate en mailboxzichtbaarheid van andere deelnemers niet wijzigen bij verwijdering door één gebruiker |
REQ-UC-GEN-MSG-005-007 | SRS-RDM-001 SRS-RDM-002 SRS-RDM-007 SRS-MSG-003 SRS-NFR-PER-001 AC-RDM-001 AC-RDM-002 AC-RDM-007 AC-MSG-003 AC-NFR-PER-001 | Verwijderde privéthreads uitsluiten uit het eigen berichtenoverzicht, zoekresultaten, filters, paginering en samenvattingsaantallen |
REQ-UC-GEN-MSG-005-008 | SRS-RDM-001 SRS-RDM-002 SRS-RDM-007 SRS-MSG-003 AC-RDM-001 AC-RDM-002 AC-RDM-007 AC-MSG-003 | De eigen ongelezenbadge opnieuw bepalen nadat een privéthread uit de eigen mailbox is verwijderd |
REQ-UC-GEN-MSG-005-009 | SRS-MSG-001 SRS-POP-001 AC-MSG-001 AC-POP-001 | Bij annuleren van de bevestigingspopup geen datamutatie uitvoeren |
REQ-UC-GEN-MSG-005-010 | SRS-MSG-003 SRS-GUA-001 SRS-NFR-SEC-001 AC-MSG-003 AC-GUA-001 AC-NFR-SEC-001 | Veilig omgaan met herhaalde of verouderde verwijdercommands voor threads die al uit de eigen mailbox verwijderd zijn |
REQ-UC-GEN-MSG-005-011 | SRS-MSG-003 SRS-SHR-004 SRS-SHR-007 SRS-NFR-LOG-001 AC-MSG-003 AC-SHR-004 AC-SHR-007 AC-NFR-LOG-001 | Bij technische fout tijdens verwijderen geen gedeeltelijke mutatie bewaren |
REQ-UC-GEN-MSG-005-012 | SRS-MSG-001 AC-MSG-001 | Bij foutpaden geen technische identifiers, stacktraces of interne databasenaamgeving tonen aan de gebruiker |
REQ-UC-GEN-MSG-005-013 | SRS-RDM-001 SRS-RDM-007 SRS-RDM-009 SRS-MSG-003 SRS-NFR-SEC-001 AC-RDM-001 AC-RDM-007 AC-RDM-009 AC-MSG-003 AC-NFR-SEC-001 | Vanuit de open-berichtweergave na succesvolle verwijdering terugnavigeren naar een veilige berichtenroute of het berichtenoverzicht |
REQ-UC-GEN-MSG-005-014 | SRS-MSG-003 SRS-NFR-AUD-001 AC-MSG-003 AC-NFR-AUD-001 | De functionele gebeurtenis van participantgebonden mailboxverwijdering traceerbaar kunnen vastleggen |
8.1 Alleen-overblijven en vervolgacties
Als een deelnemer het gesprek verlaat en daardoor een andere deelnemer alleen overblijft, blijft de historie voor die achterblijvende deelnemer zichtbaar zolang diens participantcontext zichtbaar is. De achterblijvende deelnemer kan binnen dit gesprek niet meer antwoorden en kan het onderwerp niet meer aanpassen. De UI toont dit vooraf met een vriendelijke toelichting en de server dwingt dezelfde regel af bij handmatige of stale requests.