Skip to content

Commit b5b05ca

Browse files
committed
feat: implement message deletion and enhance group chat functionality with search and mention features
1 parent f28f6cf commit b5b05ca

3 files changed

Lines changed: 507 additions & 12 deletions

File tree

backend/src/group-chat/group-chat.gateway.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,28 @@ export class GroupChatGateway
104104
// broadcast to everyone in the room (including sender)
105105
this.server.to(`ws:${data.workspaceId}`).emit("group-chat:message", saved);
106106
}
107+
108+
/** Client deletes their own message */
109+
@SubscribeMessage("group-chat:delete")
110+
async handleDelete(
111+
@MessageBody()
112+
data: {
113+
workspaceId: string;
114+
messageId: string;
115+
memberId: string;
116+
},
117+
@ConnectedSocket() client: Socket,
118+
) {
119+
if (!data?.workspaceId || !data?.messageId || !data?.memberId) return;
120+
121+
const deleted = await this.chatService.deleteMessage(
122+
data.messageId,
123+
data.memberId,
124+
);
125+
if (!deleted) return; // not found or not owner
126+
127+
this.server
128+
.to(`ws:${data.workspaceId}`)
129+
.emit("group-chat:deleted", { messageId: data.messageId });
130+
}
107131
}

backend/src/group-chat/group-chat.service.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,13 @@ export class GroupChatService {
2626
}) {
2727
return this.prisma.groupChatMessage.create({ data });
2828
}
29+
30+
async deleteMessage(messageId: string, memberId: string) {
31+
const msg = await this.prisma.groupChatMessage.findUnique({
32+
where: { id: messageId },
33+
});
34+
if (!msg || msg.memberId !== memberId) return null;
35+
await this.prisma.groupChatMessage.delete({ where: { id: messageId } });
36+
return msg;
37+
}
2938
}

0 commit comments

Comments
 (0)