Messages + Comments — Code Map
API
| File | Role |
|---|---|
apps/api/src/messages/messages.module.ts | DI wiring; brings in R2, Redis, Users, Uploads, Push |
apps/api/src/messages/messages.controller.ts | REST endpoints — DMs + workout-anchored comments + program summaries |
apps/api/src/messages/messages.service.ts | Core service: createMessage, listConversations, getConversationMessages, markRead, markConversationRead, deleteMessage, createWorkoutComment, workout-comment readers, verifyCanMessage, attachment helpers |
apps/api/src/messages/messages.gateway.ts | Socket.io gateway at /ws. Clerk-auth handshake; presence; typing; broadcast message:new and announcement:new |
apps/api/src/messages/messages.service.driver.ts + .unit.spec.ts | Tests |
apps/api/src/messages/dto/messages.dto.ts | All DTOs |
DB
| File | Role |
|---|---|
libs/db/src/lib/schema/messaging.ts | messages, message_attachments, enums sender_role, attachment_type |
libs/db/src/lib/schema/comments.ts | exercise_comments — pinned to workout_movement |
Web
| File | Role |
|---|---|
apps/web/src/components/messages/chat-window.tsx | DM chat UI |
apps/web/src/components/messages/conversation-list.tsx | Inbox |
apps/web/src/components/messages/message-bubble.tsx | Single message |
apps/web/src/components/messages/date-separator.tsx | Date dividers |
apps/web/src/components/messages/file-upload-area.tsx | Attachment picker |
apps/web/src/components/messages/new-conversation-dialog.tsx | Start a new DM |
apps/web/src/components/messages/workout-comments-panel.tsx + sheet variant + .int.spec.tsx | Workout-anchored thread surface |
Cross-feature links
- Push:
apps/api/src/push-notifications/push-notifications.service.ts.notifyUserinvoked from messages service. - Uploads:
apps/api/src/uploads/uploads.service.ts.createPresignedUpload. - Event tracking:
apps/api/src/event-tracking/event-tracking.service.ts— no direct hook in messages today.