fix: wrap DM message deletion in transaction for atomicity

Matches the space message delete handler pattern. Prevents inconsistent
state if the server crashes between individual delete operations.
This commit is contained in:
Jannis Braun
2026-03-23 01:54:42 +01:00
parent d687988ba8
commit 8bcb5cc977
+6 -8
View File
@@ -993,20 +993,18 @@ function handleDmMessageDelete(event: Record<string, unknown>, userId: string):
const dmAttachmentRows = db.select({ filename: schema.attachments.filename })
.from(schema.attachments).where(eq(schema.attachments.dmMessageId, messageId)).all();
// Delete attachments linked to this DM message
db.delete(schema.attachments)
// Delete attachments, reactions, and message atomically
db.transaction((tx) => {
tx.delete(schema.attachments)
.where(eq(schema.attachments.dmMessageId, messageId))
.run();
// Delete reactions
db.delete(schema.dmReactions)
tx.delete(schema.dmReactions)
.where(eq(schema.dmReactions.dmMessageId, messageId))
.run();
// Delete message
db.delete(schema.dmMessages)
tx.delete(schema.dmMessages)
.where(eq(schema.dmMessages.id, messageId))
.run();
});
// Clean up files from disk
deleteAttachmentFiles(dmAttachmentRows);