Skip to Content
Living documentation — last reviewed 2026-05-28
FeaturesAnnouncementsAnnouncements — Code Map

Announcements — Code Map

API

FileRole
apps/api/src/announcements/announcements.module.tsDI wiring; imports MessagesModule for the gateway + push module + event tracking
apps/api/src/announcements/announcements.controller.tsEndpoints: create, list, detail, mark read, unread count
apps/api/src/announcements/announcements.service.tscreateAnnouncement, fanOutAnnouncementPush, listAnnouncements, getAnnouncementDetail, markRead, getUnreadCountForClerk
apps/api/src/announcements/announcements.service.driver.ts + .unit.spec.tsTests
apps/api/src/announcements/dto/announcements.dto.tsDTOs, including the email audience
apps/api/src/announcements/announcement-email.queue.tsQueue name + job payload
apps/api/src/announcements/announcement-email.processor.tsSends one email per job
apps/api/src/announcements/announcement-attachment.tsSafe attachment name; link lifetime
apps/api/src/uploads/uploads.service.tsannouncement_attachment upload policy (5 MB, allowlist)
apps/api/src/notifications/email.service.tsattachments (download links)
apps/api/src/announcements/announcements.email.unit.spec.tsAudience resolution, limits, queue failure
apps/api/src/notifications/templates/announcement.ts (+ spec)The email, in en / he / ru
apps/api/src/memberships/memberships.service.tsresolveAudience — the roster filter, unpaginated; shares buildMemberFilter with listMembers

DB

FileRole
libs/db/src/lib/schema/announcements.tsannouncements, announcement_reads

Web

FileRole
apps/web/src/components/announcements/create-announcement-dialog.tsx (+ spec + driver)Staff composer, with the email switch
apps/web/src/components/announcements/member-audience-picker.tsxFilters, server count, 50-per-page member list, exclude / pick
apps/web/src/components/announcements/member-audience.tsPicker state and its mapping to the request
apps/web/src/hooks/announcements/use-announcement-email-preview.tsThe recipient count
apps/web/src/hooks/announcements/use-announcement-attachment.tsChecks, presigns and uploads the file
apps/web/src/components/announcements/announcement-bell-panel.tsxBell + dropdown
apps/web/src/components/announcements/announcement-card.tsx (+ spec + driver)List item
apps/web/src/components/announcements/announcement-detail.tsxDetail w/ read receipts
apps/web/src/components/announcements/announcement-list.tsxPaginated list
apps/web/src/components/announcements/announcements-tab.tsxTab embedding

Cross-feature

  • apps/api/src/messages/messages.gateway.ts .broadcastAnnouncement(orgId, payload) — emits announcement:new to org:{orgId} room.
  • apps/api/src/push-notifications/push-notifications.service.ts .notifyUsers(ids, payload) with category announcement.
  • apps/api/src/event-tracking/event-tracking.service.ts .track('announcement_published', ...).