“Customer notification” and “Admin alert” below mean: persisted in-app notification + email +
live WebSocket push to the customer, or a live
admin-alert WebSocket push (plus an ops email)
respectively. See Real-time Notifications for the delivery mechanics.Live — actively published and wired
These 17 events are published by a backend service today, and each one triggers a real, content-complete customer notification and/or admin alert (not placeholder copy).Loyalty point awards (leaving a review, referring a friend, sharing a product) notify the
customer too, but not through this event bus —
LoyaltyService calls
NotificationsService.createInApp(...) directly, in-process, since both live in
engagement-service. See loyalty.service.ts. The loyalty.points.earned and
referral.reward.earned enum entries below exist for a bus-based version of this that was never
needed once the direct call was in place.Dormant — content ready, nothing publishes them yet
These 35 events have complete, real (non-placeholder) rendered content inengagement-service/src/notifications/templates.ts, and DomainEventsListener is already
subscribed and ready to act on them — but no service in the codebase ever calls
messaging.publish(...) for them, because the feature that would trigger them doesn’t exist yet
(returns, carrier/logistics integration, wholesale billing, cron-based reporting, staff CRUD,
support ticketing, etc.). Wiring one of these up is “call publish() from the right place,” not
“write the notification.”
Orders, delivery & returns (12)
Orders, delivery & returns (12)
return.request.received, return.approved, return.rejected, refund.processed,
delivery.carrier.assigned, delivery.ready_for_collection, delivery.delayed,
delivery.failed, delivery.rescheduled, order.recurring.reminder,
order.reorder.suggestion, cart.abandonedWholesale / B2B (7)
Wholesale / B2B (7)
wholesale.delivery_instructions.needed, wholesale.credit_terms.updated,
wholesale.account.suspended, wholesale.account.reinstated, wholesale.statement.ready,
wholesale.catalogue.updated, wholesale.price.changeAccount, security & support (8)
Account, security & support (8)
wishlist.reminder, support.ticket.received, support.ticket.resolved,
user.totp.setup_reminder, user.data_export.ready, user.login.new_device,
policy.updated, referral.reward.earnedStaff & catalogue admin (5)
Staff & catalogue admin (5)
staff.account.created, staff.role.updated, staff.account.deactivated,
product.published, product.removedReporting (3)
Reporting (3)
category.updated, reports.sales.daily, reports.sales.weeklyDefined but effectively unhandled
Five events fall into neither bucket above — they exist in theDomainEvent enum but have no
rendered template of any kind, so DomainEventsListener isn’t even subscribed to them: