From 5bb62f1b14580d9c9f80fac862dfd55932e9b743 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Tue, 28 Jan 2025 19:45:03 +0530 Subject: [PATCH] fix: edit messages with votes (#737) --- lib/db/queries.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/db/queries.ts b/lib/db/queries.ts index 4a85e29..3eb5949 100644 --- a/lib/db/queries.ts +++ b/lib/db/queries.ts @@ -1,7 +1,7 @@ import 'server-only'; import { genSaltSync, hashSync } from 'bcrypt-ts'; -import { and, asc, desc, eq, gt, gte } from 'drizzle-orm'; +import { and, asc, desc, eq, gt, gte, inArray } from 'drizzle-orm'; import { drizzle } from 'drizzle-orm/postgres-js'; import postgres from 'postgres'; @@ -301,11 +301,28 @@ export async function deleteMessagesByChatIdAfterTimestamp({ timestamp: Date; }) { try { - return await db - .delete(message) + const messagesToDelete = await db + .select({ id: message.id }) + .from(message) .where( and(eq(message.chatId, chatId), gte(message.createdAt, timestamp)), ); + + const messageIds = messagesToDelete.map((message) => message.id); + + if (messageIds.length > 0) { + await db + .delete(vote) + .where( + and(eq(vote.chatId, chatId), inArray(vote.messageId, messageIds)), + ); + + return await db + .delete(message) + .where( + and(eq(message.chatId, chatId), inArray(message.id, messageIds)), + ); + } } catch (error) { console.error( 'Failed to delete messages by id after timestamp from database',