diff --git a/Fabric.Backend.Guild/src/messaging/messaging.controller.ts b/Fabric.Backend.Guild/src/messaging/messaging.controller.ts index a8b957e..9e88c89 100644 --- a/Fabric.Backend.Guild/src/messaging/messaging.controller.ts +++ b/Fabric.Backend.Guild/src/messaging/messaging.controller.ts @@ -18,6 +18,7 @@ import { Message } from '../entities/message.entity'; import { IdempotencyRecord } from '../entities/idempotency-record.entity'; import { EventsService } from '../events/events.service'; import { clampLimit, computeNextExpectedSeq } from './pagination.util'; +import { RealtimeGateway } from '../realtime/realtime.gateway'; const EDIT_WINDOW_MS = 15 * 60 * 1000; const DEFAULT_PAGE_LIMIT = 50; @@ -34,6 +35,7 @@ export class MessagingController { @InjectRepository(IdempotencyRecord) private readonly idemRepo: Repository, private readonly events: EventsService, + private readonly realtime: RealtimeGateway, ) {} private async getIdempotentResponse( @@ -125,6 +127,7 @@ export class MessagingController { actorId: body.authorUserId ?? 'anonymous', data: responseBody, }); + this.realtime.emitChannelEvent(channelId, 'message.created', responseBody); return responseBody; } @@ -161,6 +164,7 @@ export class MessagingController { actorId: saved.authorUserId, data: responseBody, }); + this.realtime.emitChannelEvent(channelId, 'message.updated', responseBody); return responseBody; } @@ -202,6 +206,11 @@ export class MessagingController { deletedAt: item.deletedAt?.toISOString() ?? null, }, }); + this.realtime.emitChannelEvent(channelId, 'message.deleted', { + messageId, + seq: item.seq, + deletedAt: item.deletedAt?.toISOString() ?? null, + }); return responseBody; } diff --git a/docs/TODO-backend-center-guild.md b/docs/TODO-backend-center-guild.md index 0ab8f8b..ecbb82c 100644 --- a/docs/TODO-backend-center-guild.md +++ b/docs/TODO-backend-center-guild.md @@ -57,7 +57,7 @@ ### 2.4 实时通信(MVP 后半) - [x] WebSocket 网关接入 -- [ ] message.created/updated/deleted 事件广播 +- [x] message.created/updated/deleted 事件广播 - [ ] 在线状态 + typing 事件 ---