Berichten
Deze map bevat de generieke usecases voor het berichtendomein van OefenHub. Het domein omvat systeemberichten, privéberichtthreads, leesstatus, mailboxweergave, threadgebeurtenissen en vervolgacties vanuit berichten.
De usecases in deze map zijn procesgericht. De schermdocumentatie van de berichtenschermen blijft de bron voor exacte UI-opbouw, labels, posities, iconen, voorbeeldwaarden en responsive gedrag. Deze usecases beschrijven vooral het gedrag achter de schermen: welke mailboxcontext geldt, welke controles server-side plaatsvinden, welke records worden gelezen of gewijzigd, welke ongelezenstatus ontstaat en welke vervolgprocessen worden gestart.
Usecases
| Usecase | Omschrijving |
|---|---|
| UC-GEN-MSG-001 — Berichtenoverzicht bekijken | Bekijken van de gebruikergebonden mailboxweergave voor systeemberichten en privéberichtthreads, inclusief sortering, zoeken, filteren, ongelezenstatus, paginering en lichte mailboxacties. |
| UC-GEN-MSG-002 — Privébericht opstellen en verzenden | Opstellen en verzenden van een nieuw privébericht aan een toegestane ontvanger, inclusief ontvangerselectie, relatiecontrole, opslag, readstate en tellerupdate voor de ontvanger. |
| UC-GEN-MSG-003 — Bericht openen | Openen van een systeembericht of privéberichtthread, inclusief objecttoegang, automatische leesactie, threadcontext, thread-events en afhandeling van niet-beschikbare berichten. |
| UC-GEN-MSG-004 — Bericht beantwoorden | Beantwoorden van een bestaande privéberichtthread, inclusief validatie, relatiecontrole op verzendmoment, optionele onderwerpwijziging en ongelezenstatus voor andere deelnemers. |
| UC-GEN-MSG-005 — Privéberichtthread verwijderen | Verwijderen van een privéberichtthread uit uitsluitend de eigen mailboxweergave, inclusief bevestiging, participantcontrole, readstate-effect en telleractualisatie. |
Relevante schermdocumentatie
| Scherm / context | Relevantie |
|---|---|
| SCH-GEN-02 — Berichtenoverzicht | Primaire mailboxpagina voor systeemberichten en privéberichtthreads, inclusief filters, zoeken, ongelezenstatus, samenvattingen en acties. |
| SCH-GEN-03 — Nieuw privébericht | Pagina voor het opstellen van een nieuw privébericht aan een toegestane ontvanger binnen een geldige relatiecontext. |
| SCH-GEN-04 — Open bericht | Leesweergave voor een geopend systeembericht of privéberichtthread, inclusief eerdere berichten en beschikbare vervolgacties. |
| SCH-GEN-05 — Beantwoord bericht | Inline antwoordcomponent voor bestaande privéberichtthreads, inclusief compacte editor, veilige opmaak en gewone threadcontext. |
| Ontwerpbronnen — Popup-register | Centrale bron voor popupkeys, popupteksten, knopacties en inputvelden. |
| Ontwerpbronnen — Popup-themes | Centrale bron voor popupvarianten, themes en importdefaults. |
Domeinafbakening
| Onderwerp | Afbakening |
|---|---|
| Systeemberichten | Worden opgeslagen als systeemgegenereerde berichten met een functionele verwijzing naar een domeinobject, zoals RelationshipInvitation, Ticket of PrivateMessageThread. |
| Privéberichtthreads | Worden opgeslagen als conversatiecontext in PrivateMessageThreads, met deelnemers, berichten, threadgebeurtenissen en participantgebonden mailboxstatus. |
| Privéberichten | Worden opgeslagen als individuele berichten binnen een privéberichtthread. Zij zijn alleen toegestaan tussen gebruikers waarvoor de geldende relatie- en contextregels privécommunicatie toestaan. |
| Threaddeelnemers | Worden participantgebonden vastgelegd, zodat verwijderen, gelezen/ongelezen en zichtbaarheid per gebruiker kunnen verschillen. |
| Threadgebeurtenissen | Worden binnen de privéthread vastgelegd als PrivateMessageThreadEvents, bijvoorbeeld bij onderwerpwijziging. Zij zijn geen losse systeemberichten en geen gewone privéberichten. |
| Leesstatus | Wordt per gebruiker of participant bijgehouden. Het openen van een bericht of thread kan de leespositie van uitsluitend de ingelogde gebruiker wijzigen. |
| Headerbadge / teller | Toont ongelezen berichten voor de ingelogde gebruiker. Bij leerlingen blijft de teller tijdens een actieve oefenrun tijdelijk verborgen zodat de oefenflow niet onderbroken wordt. |
| Retentie | Privéberichten kennen een bewaartermijn. Systeemberichten blijven functioneel beschikbaar als gebruikersgerichte logging, tenzij later anders vastgelegd. |
| Relatiebeheer | Bepaalt wie elkaar privéberichten mogen sturen. De relatieflows zelf worden uitgewerkt in de relatie-usecases. |
| Meldingen en andere doeldomeinen | Kunnen systeemberichten of privéberichten veroorzaken, maar hun inhoudelijke proceslogica wordt uitgewerkt in het betreffende domein. |
Berichttypen en hoofdobjecten
| Berichtcontext | Hoofdentiteit | Kenmerk |
|---|---|---|
| Systeembericht | SystemMessages | Door het systeem aangemaakt bericht met EntityType en EntityId voor doorklikbare vervolgactie. |
| Privéthread | PrivateMessageThreads | Conversatiecontainer met onderwerp, deelnemers, laatste activiteit en threadhistorie. |
| Threaddeelnemer | PrivateMessageThreadParticipants | Participantgebonden zichtbaarheid, readstate en mailboxstatus. |
| Privébericht | PrivateMessages | Door gebruiker of systeem namens gebruiker geplaatst bericht binnen een privéthread. |
| Threadgebeurtenis | PrivateMessageThreadEvents | Systeemachtige regel binnen een privéthread, zoals onderwerpwijziging of deelnemerwijziging. |
| Readstate / readmodel | Participantgebonden afleiding | Bepaalt gelezen/ongelezenstatus, tellerwaarden en mailboxweergave voor de ingelogde gebruiker. |
Bijzondere regels
| Onderwerp | Regel |
|---|---|
| Server-side controle | Frontend-zichtbaarheid van knoppen, berichten of threads is nooit voldoende autorisatie. Elke actie wordt server-side gecontroleerd op actor, deelnemerschap, relatiecontext, objecttoegang, featurestatus en mailboxstatus. |
| Gebruikergebonden mailbox | Het berichtenoverzicht toont alleen systeemberichten en privéthreads die voor de ingelogde gebruiker zichtbaar zijn. Andere gebruikers, deelnemers of verborgen threads mogen niet uitlekken via zoeken, filters of tellers. |
| Systeemberichten | Systeemberichten kunnen worden gelezen en als gelezen/ongelezen gemarkeerd, maar zijn niet verwijderbaar door de gebruiker. |
| Privéthread verwijderen | Verwijderen van een privéthread is participantgebonden. De thread verdwijnt alleen uit de mailboxweergave van de gebruiker die verwijdert; andere deelnemers behouden hun eigen zichtbaarheid. |
| Nieuwe privéberichten | Een nieuw privébericht mag alleen worden verzonden aan een toegestane ontvanger binnen een actuele en geldige relatiecontext. De backend controleert dit opnieuw op verzendmoment. |
| Beantwoorden | Beantwoorden is alleen beschikbaar voor privéberichtthreads. Systeemberichten kennen geen reguliere antwoordactie. |
| Relatie vervallen | Wanneer de relatie- of deelnemerscontext bij verzenden of beantwoorden niet meer geldig is, wordt de mutatie geblokkeerd en volgt de passende popupverwijzing. |
| Threadgebeurtenissen | Threadgebeurtenissen tellen mee in de threadtijdlijn en kunnen bijdragen aan ongelezenstatus, maar worden niet als SystemMessages of PrivateMessages opgeslagen. |
| Onderwerpwijziging | Een gewijzigde onderwerpwaarde bij beantwoorden wordt vastgelegd als threadgebeurtenis en niet als los systeembericht. |
| Zoeken en filters | Zoeken en filteren werken uitsluitend binnen de geautoriseerde mailboxdataset. Bij privéberichtthreads mag de zoekindex gebaseerd zijn op zichtbare threadinhoud, zoals afzendernaam, onderwerp, laatste preview en functioneel doorzoekbare tekstfragmenten binnen de thread. |
| Rich text | Privéberichten ondersteunen alleen beperkte veilige opmaak. Vrije HTML, JavaScript, scripts en actieve inhoud worden niet toegestaan en server-side gesanitized. |
| Popups | Usecases verwijzen alleen naar PopupKey. Titel, tekst, knoppen, inputvelden en theme staan centraal in het popup-register en popup-themes. |
Popupverwijzingen binnen bericht-usecases
| PopupKey | Gebruik |
|---|---|
POP-GEN-MSG-NO-RELATION | Relatie- of deelnemerscontext ontbreekt of is niet meer geldig bij het opstellen of beantwoorden van een privébericht. |
POP-GEN-MSG-SEND-FAILED | Het verzenden van een privébericht of antwoord mislukt door validatie-, autorisatie- of transactionele fout. |
POP-GEN-MSG-NOT-AVAILABLE | Een bericht, thread of mailboxitem bestaat niet, is niet toegankelijk, verwijderd of anderszins niet meer beschikbaar. |
POP-GEN-MSG-DELETE-CONFIRM | Bevestiging voordat een privéberichtthread uit de eigen mailboxweergave wordt verwijderd. |
POP-GEN-MSG-DELETED | Terugkoppeling nadat een privéberichtthread uit de eigen mailboxweergave is verwijderd. |
POP-GEN-MSG-DELETE-FAILED | Het verwijderen van een privéberichtthread mislukt door validatie-, autorisatie- of transactionele fout. |
Diagramgebruik binnen bericht-usecases
De bericht-usecases gebruiken diagrammen alleen wanneer zij het proces duidelijker maken.
| Diagramtype | Gebruik |
|---|---|
| Sequence diagram | Voor interacties tussen gebruiker, frontend, backend, database, SignalR/readstate en eventuele systeembericht- of privéberichtmutaties. |
| State diagram | Voor leesstatus, mailboxzichtbaarheid of thread-/participantstatus wanneer een statusobject geraakt wordt. |
| Decision flow | Voor validatievolgorde, objecttoegang, relatiecontrole, beschikbaarheidscontrole en alternatieve routes. |
| Data lifecycle | Voor inzicht in welke records ontstaan, worden bijgewerkt of juist alleen gelezen worden bij verzenden, beantwoorden en verwijderen. |