Skip to main content

notification-service

Raises no notifications itself. Owns the preferences and state that outlive any single client: mutes, quiet hours, unread markers, and registered push devices. Full design and the client/server decision split: Notifications.

/api/v1/notifications

MethodPathWhat it does
GET/preferencesRead NotificationSetting
PATCH/preferencesUpdate mutes / quiet hours
GET/unreadPer-channel unread counts, derived from ChannelRead
POST/readMark a channel read (moves lastReadAt)

/api/v1/notifications/devices

MethodPathWhat it does
POST/Register a device's FCM token
DELETE/:deviceIdUnregister

Why the client decides

The server answers what it can see: notifications off, a muted channel, a muted person. The device answers the rest: is this my own message, is the channel already on screen, are we inside quiet hours on this clock, does the message mention me — all of which require either window state or the channel key the server doesn't have. See FCM/README.md for the push payload shape.