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',