diff --git a/src/messages/messages.controller.ts b/src/messages/messages.controller.ts index bb327d7..3c7577f 100644 --- a/src/messages/messages.controller.ts +++ b/src/messages/messages.controller.ts @@ -3,6 +3,7 @@ import { Get, Post, Patch, + Delete, Body, Param, Query, @@ -196,6 +197,28 @@ export class MessagesController { return this.messagesService.markMessagesAsRead(conversationId, userId); } + // ========================================== + // DELETE CONVERSATION + // ========================================== + @Delete('conversations/:id') + @HttpCode(HttpStatus.OK) + @ApiOperation({ summary: 'Delete a conversation and all its messages' }) + @ApiParam({ name: 'id', description: 'Conversation ID' }) + @ApiResponse({ + status: 200, + description: 'Conversation deleted', + }) + @ApiResponse({ + status: 404, + description: 'Conversation not found', + }) + async deleteConversation( + @Param('id') conversationId: string, + @CurrentUser('id') userId: string, + ) { + return this.messagesService.deleteConversation(conversationId, userId); + } + // ========================================== // GET UNREAD COUNT // ========================================== diff --git a/src/messages/messages.service.ts b/src/messages/messages.service.ts index 2422cf4..b9e8bc5 100644 --- a/src/messages/messages.service.ts +++ b/src/messages/messages.service.ts @@ -598,6 +598,42 @@ export class MessagesService { }; } + /** + * Delete a conversation and all its messages + */ + async deleteConversation(conversationId: string, userId: string) { + const conversation = await this.prisma.conversation.findUnique({ + where: { id: conversationId }, + include: { + agentProfile: { + select: { userId: true }, + }, + }, + }); + + if (!conversation) { + throw new NotFoundException('Conversation not found'); + } + + const isUser = conversation.userId === userId; + const isAgent = conversation.agentProfile.userId === userId; + + if (!isUser && !isAgent) { + throw new ForbiddenException('You are not part of this conversation'); + } + + // Delete all messages first, then the conversation + await this.prisma.message.deleteMany({ + where: { conversationId }, + }); + + await this.prisma.conversation.delete({ + where: { id: conversationId }, + }); + + return null; + } + /** * Get total unread count for a user across all conversations */