feat: Add endpoint and service logic to clear all messages within a conversation.

This commit is contained in:
pradeepkumar
2026-03-19 09:33:06 +05:30
parent 76b7365dc3
commit a68cd4c7d3
2 changed files with 58 additions and 0 deletions

View File

@@ -218,6 +218,21 @@ export class MessagesController {
return this.messagesService.markMessagesAsRead(conversationId, userId);
}
// ==========================================
// CLEAR CHAT (delete messages, keep conversation)
// ==========================================
@Delete('conversations/:id/messages')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: 'Clear all messages in a conversation' })
@ApiParam({ name: 'id', description: 'Conversation ID' })
@ApiResponse({ status: 200, description: 'Messages cleared' })
async clearChat(
@Param('id') conversationId: string,
@CurrentUser('id') userId: string,
) {
return this.messagesService.clearChat(conversationId, userId);
}
// ==========================================
// DELETE CONVERSATION
// ==========================================

View File

@@ -615,6 +615,49 @@ export class MessagesService {
};
}
/**
* Clear all messages in a conversation (keep the conversation itself)
*/
async clearChat(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
await this.prisma.message.deleteMany({
where: { conversationId },
});
// Reset conversation preview
await this.prisma.conversation.update({
where: { id: conversationId },
data: {
lastMessageAt: null,
lastMessageText: null,
userUnreadCount: 0,
agentUnreadCount: 0,
},
});
return null;
}
/**
* Delete a conversation and all its messages
*/