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:
@@ -993,20 +993,18 @@ function handleDmMessageDelete(event: Record<string, unknown>, userId: string):
|
|||||||
const dmAttachmentRows = db.select({ filename: schema.attachments.filename })
|
const dmAttachmentRows = db.select({ filename: schema.attachments.filename })
|
||||||
.from(schema.attachments).where(eq(schema.attachments.dmMessageId, messageId)).all();
|
.from(schema.attachments).where(eq(schema.attachments.dmMessageId, messageId)).all();
|
||||||
|
|
||||||
// Delete attachments linked to this DM message
|
// Delete attachments, reactions, and message atomically
|
||||||
db.delete(schema.attachments)
|
db.transaction((tx) => {
|
||||||
|
tx.delete(schema.attachments)
|
||||||
.where(eq(schema.attachments.dmMessageId, messageId))
|
.where(eq(schema.attachments.dmMessageId, messageId))
|
||||||
.run();
|
.run();
|
||||||
|
tx.delete(schema.dmReactions)
|
||||||
// Delete reactions
|
|
||||||
db.delete(schema.dmReactions)
|
|
||||||
.where(eq(schema.dmReactions.dmMessageId, messageId))
|
.where(eq(schema.dmReactions.dmMessageId, messageId))
|
||||||
.run();
|
.run();
|
||||||
|
tx.delete(schema.dmMessages)
|
||||||
// Delete message
|
|
||||||
db.delete(schema.dmMessages)
|
|
||||||
.where(eq(schema.dmMessages.id, messageId))
|
.where(eq(schema.dmMessages.id, messageId))
|
||||||
.run();
|
.run();
|
||||||
|
});
|
||||||
|
|
||||||
// Clean up files from disk
|
// Clean up files from disk
|
||||||
deleteAttachmentFiles(dmAttachmentRows);
|
deleteAttachmentFiles(dmAttachmentRows);
|
||||||
|
|||||||
Reference in New Issue
Block a user