Announcements — Code Map
API
| File | Role |
|---|---|
apps/api/src/announcements/announcements.module.ts | DI wiring; imports MessagesModule for the gateway + push module + event tracking |
apps/api/src/announcements/announcements.controller.ts | Endpoints: create, list, detail, mark read, unread count |
apps/api/src/announcements/announcements.service.ts | createAnnouncement, fanOutAnnouncementPush, listAnnouncements, getAnnouncementDetail, markRead, getUnreadCountForClerk |
apps/api/src/announcements/announcements.service.driver.ts + .unit.spec.ts | Tests |
apps/api/src/announcements/dto/announcements.dto.ts | DTOs, including the email audience |
apps/api/src/announcements/announcement-email.queue.ts | Queue name + job payload |
apps/api/src/announcements/announcement-email.processor.ts | Sends one email per job |
apps/api/src/announcements/announcement-attachment.ts | Safe attachment name; link lifetime |
apps/api/src/uploads/uploads.service.ts | announcement_attachment upload policy (5 MB, allowlist) |
apps/api/src/notifications/email.service.ts | attachments (download links) |
apps/api/src/announcements/announcements.email.unit.spec.ts | Audience resolution, limits, queue failure |
apps/api/src/notifications/templates/announcement.ts (+ spec) | The email, in en / he / ru |
apps/api/src/memberships/memberships.service.ts | resolveAudience — the roster filter, unpaginated; shares buildMemberFilter with listMembers |
DB
| File | Role |
|---|---|
libs/db/src/lib/schema/announcements.ts | announcements, announcement_reads |
Web
| File | Role |
|---|---|
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.tsx | Filters, server count, 50-per-page member list, exclude / pick |
apps/web/src/components/announcements/member-audience.ts | Picker state and its mapping to the request |
apps/web/src/hooks/announcements/use-announcement-email-preview.ts | The recipient count |
apps/web/src/hooks/announcements/use-announcement-attachment.ts | Checks, presigns and uploads the file |
apps/web/src/components/announcements/announcement-bell-panel.tsx | Bell + dropdown |
apps/web/src/components/announcements/announcement-card.tsx (+ spec + driver) | List item |
apps/web/src/components/announcements/announcement-detail.tsx | Detail w/ read receipts |
apps/web/src/components/announcements/announcement-list.tsx | Paginated list |
apps/web/src/components/announcements/announcements-tab.tsx | Tab embedding |
Cross-feature
apps/api/src/messages/messages.gateway.ts.broadcastAnnouncement(orgId, payload)— emitsannouncement:newtoorg:{orgId}room.apps/api/src/push-notifications/push-notifications.service.ts.notifyUsers(ids, payload)with categoryannouncement.apps/api/src/event-tracking/event-tracking.service.ts.track('announcement_published', ...).