9.4 Notification Event Configurations
Controller: NotificationEventConfigurationsController · Route: api/v1/NotificationEventConfigurations
· GroupName: notifications · 9 endpoints · Lets an administrator enable/disable a channel for a
specific business event, from the database, with zero code changes or redeploys — see
§3.3.
Standard CRUD action set (same shape as §9.2):
| Verb + route | Permission | Request | Response (data) |
|---|---|---|---|
POST GetDataTable | NotificationEventConfigurations.ViewAll | DtParameters | DtResult<NotificationEventConfigurationDto> (unwrapped) |
GET GetDetails/{id} | NotificationEventConfigurations.View | — | NotificationEventConfigurationDetailsDto |
GET GetEdit/{id} | NotificationEventConfigurations.Edit | — | NotificationEventConfigurationEditDto |
GET GetDropdownList?findBy=&onlyActive=true | NotificationEventConfigurations.View | query string | NotificationEventConfigurationViewListDto[] |
POST Create | NotificationEventConfigurations.Create | NotificationEventConfigurationEditDto | Guid |
PUT Update/{id} | NotificationEventConfigurations.Edit | NotificationEventConfigurationEditDto | Guid |
DELETE Delete?restore= | NotificationEventConfigurations.Delete | DeleteDto[] | Guid |
PUT Active | NotificationEventConfigurations.Active | DeleteDto[] | Guid |
PUT Deactive | NotificationEventConfigurations.Deactive | DeleteDto[] | Guid |
Field-level detail — NotificationEventConfigurationEditDto
{
"id": "00000000-0000-0000-0000-000000000000",
"isActive": true,
"displayOrder": 0,
"eventKey": "PurchaseInvoicePosted",
"displayName": "تم اعتماد فاتورة شراء",
"fDisplayName": "Purchase invoice posted",
"description": "Fires when a purchase invoice transitions to Approved/Posted status.",
"enableEmail": true,
"enableSms": false,
"enablePush": true,
"enableInApp": true,
"enableSignalR": true,
"enableWhatsApp": false
}
Validation (NotificationEventConfigurationValidator): EventKey NotEmpty + max 100, DisplayName/
FDisplayName max 200, Description max 500 (only when non-null). Note EnableWhatsApp defaults false —
WhatsApp must be explicitly opted in per event, unlike every other channel which defaults true.
Business notes: if no row exists for a given EventKey, the dispatch engine treats it as all
channels enabled (§6.2 step 2) — this table is opt-out, not
opt-in, for every channel except WhatsApp. 41 well-known event keys were seeded with all-channels-enabled
defaults (WhatsApp excluded) as part of the original migration — see
Chapter 20 — Appendix for the NotificationEventKeys catalog.
Angular: an admin settings screen typically renders this as a matrix (event rows × channel-toggle
columns) — GetDataTable for the grid, Update per toggle flip (or batch several toggles into one Update
call per row).
Flutter: not typically exposed in the end-user mobile app — this is an admin/back-office concern.
Backend: consumed by NotificationDispatchService on every dispatch, before template selection — see
Chapter 6.
Related APIs: App Notification Templates (what actually gets sent once
a channel is enabled), Chapter 8.