Domeinobjecten
Dit document koppelt functionele begrippen aan database-entiteiten, readmodels en payloadstructuren. Het voorkomt dat usecases nieuwe tabelnamen introduceren wanneer de database-informatie al een passende structuur heeft.
Tabelstructuur
| Functioneel begrip | Primaire database-entiteit / structuur | Gerelateerde entiteiten | Gebruikt in | Opmerking |
|---|---|---|---|---|
| Relatieoverzicht | Readmodel over UserRelationships, RelationshipInvitations, Users, Roles, RelationshipTypes | RelationshipEvents, SystemMessages | UC-GEN-REL-001 | Toont actieve relaties en openstaande verstuurde uitnodigingen; inkomende uitnodigingen lopen via systeemberichten. |
| Relatie | UserRelationships | RelationshipTypes, RelationshipEvents, Users, Roles | UC-GEN-REL-001, UC-GEN-REL-004, UC-GEN-REL-005 | Wordt pas actief na acceptatie van een relatie-uitnodiging. Ontkoppelen is soft-deactivatie. |
| Vriendschap | UserRelationships met relatietype Friendship | RelationshipInvitations, RelationshipEvents, Users, Roles | UC-GEN-REL-002, UC-GEN-REL-005 | Functionele relatie tussen twee leerlingrolcontexten voor communicatie en delen binnen OefenHub. |
| Ouder-/voogdrelatie | UserRelationships met relatietype GuardianStudent | RelationshipInvitations, RelationshipEvents, Users, Roles, TeacherStudentLevelAccess, ExerciseRuns | UC-GEN-REL-003, UC-GEN-REL-005, ouder/voogd-schermen | Zichtbare rol is Ouder/voogd; technische/backendwaarde is Guardian. |
| Relatie-uitnodiging | RelationshipInvitations | UserRelationships, RelationshipEvents, Users, Roles, SystemMessages | UC-GEN-REL-002, UC-GEN-REL-003, UC-GEN-REL-005 | Ondersteunt uitnodigingen met ToEmail en optioneel ToUserId; start in status Pending. |
| Externe relatie-uitnodiging | RelationshipInvitations met ToEmail gevuld en ToUserId = null | Externe uitnodigingsmail, registratieflow, RelationshipEvents | UC-GEN-REL-002, UC-GEN-REL-003, UC-GEN-REL-005 | Kan gedurende 7 dagen aan nieuw geregistreerd account met hetzelfde genormaliseerde e-mailadres worden gekoppeld. |
| Inkomende relatie-uitnodiging | SystemMessages met verwijzing naar RelationshipInvitations | RelationshipInvitations, Users, Roles | UC-GEN-REL-005 | De leidende ingang voor accepteren of afwijzen is een systeembericht; er is geen aparte inkomende lijst op de relatiepagina. |
| Openstaande verstuurde uitnodiging | RelationshipInvitations readmodel | Users, Roles, RelationshipTypes | UC-GEN-REL-001, UC-GEN-REL-002, UC-GEN-REL-003 | Zichtbaar voor de uitnodiger zolang de uitnodiging pending en zichtbaar hoort te zijn. |
| Relatie-event | RelationshipEvents | RelationshipInvitations, UserRelationships, Users, Roles | Relaties | Auditbron voor uitnodigen, koppelen, accepteren, afwijzen, verlopen, intrekken en ontkoppelen. |
| Relatie-systeembericht | SystemMessages | SystemMessageTemplates, RelationshipInvitations, UserRelationships | UC-GEN-REL-002, UC-GEN-REL-003, UC-GEN-REL-005, UC-GEN-REL-004 | Kanaal voor bestaande ontvangers en voor terugkoppeling aan de uitnodiger bij acceptatie/afwijzing of ontkoppeling. |
| Ontkoppelactie | UserRelationships update + RelationshipEvents | SystemMessages | UC-GEN-REL-004 | Directe ontkoppeling zet de relatie inactief; verzoekflow maakt geen directe relatie-update. |
| Ontkoppelverzoek | Nog nader te bepalen structuur of eventtype | RelationshipEvents, SystemMessages | UC-GEN-REL-004 | Deze usecase benoemt het verschil; de relatie blijft actief totdat een bevoegde vervolgactie het verzoek afhandelt of de relatie deactiveert. |
| Privébericht | PrivateMessages | PrivateMessageThreads, PrivateMessageThreadParticipants, Users | UC-GEN-MSG-001, UC-GEN-MSG-002, UC-GEN-MSG-003, UC-GEN-MSG-004, UC-GEN-MSG-005, berichten | Individueel bericht binnen een thread; inhoud wordt veilig verwerkt voor preview en detailweergave. |
| Berichtenoverzicht | Readmodel over SystemMessages, PrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages en PrivateMessageThreadEvents | Users, SystemSettings, SiteFeatureToggles | UC-GEN-MSG-001, UC-GEN-MSG-005 | Combineert systeemberichten en privéthread-mailboxitems voor één ingelogde gebruiker; verwijderde participantthreads worden uitgesloten. |
| Systeembericht | SystemMessages | SystemMessageTemplates, Users, domeinverwijzing via EntityType + EntityId | UC-GEN-MSG-001, UC-GEN-MSG-003, relaties, meldingen | Niet verwijderbaar door gebruikers; gelezenstatus via ReadAtUtc; openen verwerkt het onderliggende domeinobject niet automatisch. |
| Privéberichtthread | PrivateMessageThreads | PrivateMessageThreadParticipants, PrivateMessages, PrivateMessageThreadEvents | UC-GEN-MSG-001, UC-GEN-MSG-002, UC-GEN-MSG-003, UC-GEN-MSG-004, UC-GEN-MSG-005, berichten | Container voor privégesprekken; zichtbaarheid en leesstatus lopen via deelnemerlaag. |
| Privéberichtthread-deelname | PrivateMessageThreadParticipants | PrivateMessageThreads, PrivateMessages, Users | UC-GEN-MSG-001, UC-GEN-MSG-002, UC-GEN-MSG-003, UC-GEN-MSG-004, UC-GEN-MSG-005, berichten | Bepaalt mailboxzichtbaarheid, participantgebonden verwijdering en readstate. |
| Privéberichtthread-event | PrivateMessageThreadEvents | PrivateMessageThreads, Users | UC-GEN-MSG-001, UC-GEN-MSG-002, UC-GEN-MSG-003, UC-GEN-MSG-004, UC-GEN-MSG-005, berichten | Threadinterne gebeurtenis zoals onderwerpwijziging of deelnemer verlaten; geen systeembericht. |
| Open bericht | Detailreadmodel over SystemMessages of over PrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages en PrivateMessageThreadEvents | Users, domeinverwijzingen via EntityType + EntityId | UC-GEN-MSG-003, UC-GEN-MSG-005 | Toont één geautoriseerd systeembericht of één geautoriseerde privéthreaddetailcontext en verwerkt de eigen readstate bij openen; kan verwijderflow voor een privéthread starten. |
| Nieuw privébericht | Mutatieflow over PrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages, Users en UserRelationships | Featurestatus, participant-readstate, ongelezen-readmodel | UC-GEN-MSG-002 | Maakt of gebruikt een privéthreadcontext voor een nieuw privébericht en zet de ontvanger op ongelezen. |
| Beantwoord bericht | Mutatieflow over PrivateMessageThreads, PrivateMessageThreadParticipants, PrivateMessages en PrivateMessageThreadEvents | Users, UserRelationships, featurestatus, participant-readstate | UC-GEN-MSG-004 | Voegt een antwoord toe aan een bestaande privéthread en verwerkt optioneel een onderwerpwijziging als thread-event. |
| Privéberichtthread-mailboxverwijdering | Mutatie op PrivateMessageThreadParticipants | PrivateMessageThreads, ongelezen-readmodel | UC-GEN-MSG-005 | Verwijdert een privéthread uitsluitend uit de eigen mailboxweergave via participantstatus; berichten en andere deelnemers blijven intact. |
| Ongelezen berichtenteller | Afgeleid readmodel over SystemMessages, PrivateMessageThreadParticipants, PrivateMessages en PrivateMessageThreadEvents | Headercomponent, samenvattingskaart, SignalR/UI-update | UC-GEN-MSG-001, UC-GEN-MSG-002, UC-GEN-MSG-003, UC-GEN-MSG-004, UC-GEN-MSG-005 | Gebruikergebonden teller; leerlingbadge kan tijdens actieve oefenrun visueel verborgen zijn. |
| Melding | Tickets | TicketDiscussionMessages, TicketClosures, TicketReopenRequests, TicketHistory | Meldingen | Status wordt deels afgeleid uit ticketcontext. |
| Oefenrun | ExerciseRuns | ExerciseRunProgress, resultaten, historiesnapshots | Oefenen | Relevante relatiegevolgen: ouder/voogd-inzage en live meekijken stoppen voor toekomstige toegang na ontkoppeling. |
| Functioneel begrip | Primaire database-entiteit / structuur | Betekenis / toelichting | Gebruikt in |
|---|---|---|---|
| Melding technische snapshot | TicketTechnicalSnapshots | Momentopname van technische en contextuele gegevens bij indienen; wordt niet achteraf herberekend. | UC-GEN-TIC-001, UC-GEN-TIC-009 |
| Meldingbeheerderkoppeling | TicketAssignments | Actieve koppeling tussen melding en één of meer beheerders; bepaalt behandelcontext. | UC-GEN-TIC-010, UC-GEN-TIC-011, UC-GEN-TIC-013, UC-GEN-TIC-015 |
| Melding doorgezet naar docent | TicketForwardedToTeacher | Vastlegging dat beheer een melding inhoudelijk heeft doorgezet naar een docent. | UC-GEN-TIC-015 |
| Profiel | Users / applicatieprofiel | Applicatieprofiel met naamgegevens, niveaucontext en verwijzing naar profielafbeelding. | UC-GEN-PROF-001 t/m UC-GEN-PROF-004 |
| Profielafbeelding | ProfileAvatars | Vooraf gedefinieerde profielafbeeldingen; vrije uploads zijn niet toegestaan. | UC-GEN-PROF-004 |
| Gebruikersinstelling | UserSettings | Opslag voor voorkeuren en toegankelijkheidsinstellingen van de gebruiker. | UC-GEN-PROF-005, UC-GEN-PROF-007 |
| Toegankelijkheidscookie | Browserwaarde / cookie | Technische spiegeling van beperkte toegankelijkheidswaarden voor vóór-login toepassing; geen bron van waarheid. | UC-GEN-PROF-006 |
| Systeemnotificatie | SystemNotifications | Sitebrede notificatie met doelgroep, type, inhoud, UTC-start-/eindmoment en displayregel. | UC-GEN-NOT-001 t/m UC-GEN-NOT-003 |
| Systeemnotificatie-browsermarker | Browserwaarde / cookie | Client-side marker voor OncePerBrowser; bevat geen persoonsgegevens of autorisatiedata. | UC-GEN-NOT-002, UC-GEN-NOT-003 |
| Functioneel begrip | Primaire database-entiteit / structuur | Gerelateerde entiteiten | Gebruikt in | Opmerking |
|---|---|---|---|---|
| Intern OefenHub-account | Users | UserRoles, Roles, UserSettings, identity-providerkoppeling via ExternalId | UC-GEN-ACC-001 t/m UC-GEN-ACC-006 | Applicatieaccount in OefenHub; credentials blijven bij de identity provider. |
| Identity-provideraccount | Externe identity-providercontext | Users.ExternalId | UC-GEN-ACC-001, UC-GEN-ACC-002, UC-GEN-ACC-004, UC-GEN-ACC-005, UC-GEN-ACC-006 | Externe bron voor authenticatie, wachtwoorden, e-mailverificatie en primaire sessie. |
| Accountprovisioning | Mutatieflow over Users, UserSettings, optioneel UserRoles | RelationshipInvitations, RelationshipEvents, SystemMessages, accountlog | UC-GEN-ACC-001 | Maakt na eerste succesvolle identity-providerlogin een intern account aan wanneer dit nog niet bestaat. |
| OefenHub-sessiecontext | Technische applicatiesessie + server-side contextbepaling | Users, UserRoles, Roles, UserSettings | UC-GEN-ACC-002, UC-GEN-ACC-003, UC-GEN-ACC-006 | Geen aparte domeintabel; bepaalt beschikbare frontendcontexten en routeguardgedrag. |
| Context zonder rol | Afgeleide frontendcontext | Users, UserRoles, Roles, UserSettings | UC-GEN-ACC-003 | Beperkte geauthenticeerde context wanneer geen actieve bruikbare rolcontext beschikbaar is. |
| Accountverwijdering | Mutatieflow over Users en afhankelijke domeinen | UserRelationships, RelationshipInvitations, TeacherLevels, ExerciseRuns, PrivateMessageThreadParticipants, Tickets, LiveViewAudit, accountlog | UC-GEN-ACC-004 | Gebruikersgerichte selfservice-flow voor het eigen account; leidt direct tot anonimisering. |
| Accountanonimisering | Users update en afhankelijke opruimflow | Rollen, relaties, toegang, oefenruns, berichten, meldingen, live-audit, domeinhistorie | UC-GEN-ACC-005 | Vervangt zichtbare persoonsgegevens door systeemwaarden en blokkeert reguliere toegang. |
| Account lifecycle-logging | Accountlogkanaal / applicatielog | Relevante domeinhistorie | UC-GEN-ACC-001 t/m UC-GEN-ACC-006 | Technische herleidbaarheid zonder wachtwoorden, tokens, secrets of credentialgegevens. |
| Logoutcontext | Technische sessie-/routeguardcontext | SignalR, browserwaarden, LiveViewAudit | UC-GEN-ACC-006 | Beëindigt lokale applicatiecontext; geen aparte domeinsessietabel. |
| Functioneel begrip | Betekenis |
|---|---|
| Actieve leerlingniveaucontext | Afgeleide context die bepaalt welk niveau leidend is voor leerlingfrontpage, categorieën, oefeningen, voortgang en geschiedenis. |
| Toegankelijke leerlingcategorie | Categorie die binnen het actieve niveau en de actuele autorisatiecontext zichtbaar is voor de leerling. |
| Toegankelijke leerlingoefening | Concrete oefening die actief is en binnen de actuele leerlingcontext geopend of gestart mag worden. |
| Exercise run | Zelfstandige uitvoering van een oefening door een gebruiker, met eigen voortgang, antwoorden, totalen en afronding. |
| Niet-afgeronde exercise run | Run zonder afrondmoment die hervatbaar kan zijn zolang de context nog geldig is. |
| Gedeelde oefening | Administratief ontvangen of verstuurd gedeeld oefenrecord dat pas bij starten door de ontvanger een eigen run oplevert. |
| Docentniveau | Onderwijscontext waarin een docent categorieën, oefeningen, leerlingen en collaborators beheert. |
| Niveau-collaborator | Docent met expliciet bewerkrecht binnen een niveau, zonder automatisch toegang tot leerlingen of resultaten. |
| Niveau-eigendomsoverdracht | Formele wijziging van de eigenaar van een docentniveau met verplichte reden en historie. |
| Docent-leerling-niveauautorisatie | Toegangstoekenning waarmee een docent een leerling toegang geeft tot een niveau binnen de eigen docentcontext. |
| Docenttest-run | Tijdelijke of opruimbare oefenrun voor testdoeleinden door docent, niet zichtbaar als leerlingresultaat. |
| Live-meekijksessie | Alleen-lezen realtime observatie van een actieve leerlingrun binnen geautoriseerde docent- of oudercontext. |
Invulregels
| Onderwerp | Regel |
|---|---|
| Geen fictieve tabellen | Gebruik alleen entiteiten die in database-informatie bestaan of markeer expliciet dat verdere uitwerking nodig is. |
| Functionele term | Gebruik Nederlandse functionele term in de eerste kolom. |
| Technische naam | Gebruik de technische naam zoals bekend in database-informatie of ontwerpbronnen. |
| Relaties | Leg bij relatieobjecten altijd vast of het om een uitnodiging, actieve relatie, event of readmodel gaat. |
Beheerder- en ouder-/voogdcontexten
| Domeinobject | Domein | Betekenis | Belangrijkste relaties / aandachtspunten |
|---|---|---|---|
| AdminFrontpageReadModel | Beheerder-frontpage | Afgeleid readmodel voor beheerder-frontpageblokken en recente beheerwijzigingen. | Geen brondata; opgebouwd uit bestaande beheer-, content-, account- en notificatiebronnen. |
| ManagedContentBlock | Frontpagebeheer / vaste pagina’s | Beheerbaar tekstueel contentblok binnen codevaste pagina- of frontpagepositie. | Context, BlockKey, titel/tekst/labelvelden, geschiedenis. |
| ManagedUrl | Handige links | Herbruikbare interne of externe URL voor footer en vaste pagina’s. | URL-validatie, gebruikscontrole, soft-delete. |
| FooterSection / FooterLinkPlacement | Handige links | Contextgebonden footerinhoud en geselecteerde linkplaatsingen. | Rolcontext, kolom, volgorde, verwijzing naar ManagedUrl. |
| PopupDefinition / PopupHistory | Popupbeheer | Bestaande popupdefinitie en wijzigingshistorie. | PopupKey stabiel; technische velden read-only. |
| SystemMessageTemplate / TemplateHistory | Systeemberichtenbeheer | Bestaand systeemberichtsjabloon en geschiedenis. | Referentienaam stabiel; placeholdervalidatie. |
| SiteFeatureToggle | Features | Sitebrede toggle voor expliciet schakelbare functie. | History/audit, geen toggle voor verplichte kernfunctionaliteit. |
| SiteNotification | Systeemnotificaties | Beheerde notificatie-overlay na frontpageload. | AudienceType, NotificationType, DisplayRule, StartUtc, EndUtc. |
| SystemSetting | Systeeminstellingen | Bestaande configuratiesleutel met datatype en invoervorm. | Nieuwe sleutels via code/migratie; wijzigingen auditbaar. |
| ManagementLogEntry | Beheerlogging | Auditregel voor beheerhandelingen. | Actor, rolcontext, domein, actie, object, tijdstip, oude/nieuwe waarde. |
| CategoryMigration | Categoriebeheer | Registratie van broncategorie naar doelcategorie. | Bron/doel, actor, reden, conflictverwerking, geen herschrijven historische runs. |
| ExerciseModuleMigration | Modulebeheer | Registratie van modulemigratie op proef-, docent- of globale scope. | Bron/doelmodule, scope, actor, reden, oefeningimpact. |
| TeacherSupportContext | Docentondersteuning | Tijdelijke beheercontext rond één geselecteerde docent. | Inspectie/correctie zonder centraal categorie- of modulebeheer te dupliceren. |
| AccountLifecycleLog | Accountbeheer | Historylaag voor beheerdergestuurde accountmutaties. | Rollen, status, instellingen, anonimisering, geen identity-providercredentials. |
| GuardianChildReadModel | Ouder/voogd | Afgeleid overzicht van gekoppelde kinderen. | Gebaseerd op actieve GuardianStudent-relaties. |
| GuardianResultReadModel | Ouder/voogd resultaten | Afgeleide resultaat- en geschiedenisset over gekoppelde kinderen. | Leest historische runs; creëert geen aparte resultaatdata. |
| GuardianHistoryReadModel | Ouder/voogd resultaten | Afgeleide geschiedenisregels van afgeronde runs van één gekoppeld kind. | Alleen afgeronde, niet-test runs; geen aparte brondata. |
| TicketReopenDeadlineProcessing | Systeemverwerking / meldingen | Periodieke TickerQ-verwerking over Tickets en TicketClosures | TicketHistory, schedulerlogging; UC-GEN-TIC-016; Geen nieuwe bronentiteit; idempotente verwerking op actuele databasecriteria. |
| GuardianHistoryFilterReadModel | Ouder/voogd resultaten | Filteropties en gefilterde geschiedenisset voor periode, niveau, categorie en oefening. | Filteropties komen uitsluitend uit de toegestane kinddataset. |
| GuardianRunDetailReadModel | Ouder/voogd resultaten | Read-only detailweergave van één afgeronde run met historische context en totalen. | RunId wordt opnieuw server-side geautoriseerd. |
| GuardianResultStatisticsReadModel | Ouder/voogd resultaten | Vraagdetails en statistieken van een geautoriseerde afgeronde run. | Leest opgeslagen runvelden; geen clientside herberekening. |
| GuardianPdfExportModel | Ouder/voogd resultaten | Tijdelijk exportmodel voor PDF-download van een geautoriseerd resultaat. | Geen verplicht permanent documentrecord. |
| GuardianOnlineOverviewReadModel | Ouder/voogd live | Overzicht van gekoppelde kinderen met online- en oefenstatus. | Overzicht starten maakt geen LiveViewAudit aan. |
| LiveAvailabilityReadModel | Ouder/voogd live | Afgeleide beschikbaarheidsstatus voor Kijk live mee. | Knopstatus is geen autorisatiebron; start controleert opnieuw. |
| GuardianLiveSessionReadModel | Ouder/voogd live | Read-only liveweergave van actuele vraag, voortgang en vraaglijst. | SignalR is transport; opgeslagen voortgang blijft bron. |