Skip to content

Commit 95a54a8

Browse files
committedMar 16, 2025
Fix delete message causing lastMsgId to be wrong
1 parent 1b1fd38 commit 95a54a8

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed
 

‎server/src/db/models/chats.ts

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -149,18 +149,23 @@ export async function getLastMessageId(
149149

150150
/** Updates lastMsgId for a chat by selecting the highest messageId */
151151
async function refreshLastMessageId(chatId: number) {
152-
let [chat] = await db.select().from(chats).where(eq(chats.id, chatId))
153-
if (!chat) {
154-
throw ModelError.ChatInvalid
155-
}
152+
// Use a transaction with FOR UPDATE to lock the row while we're working with it
153+
return await db.transaction(async (tx) => {
154+
let [chat] = await tx.select().from(chats).where(eq(chats.id, chatId)).for("update")
155+
if (!chat) {
156+
throw ModelError.ChatInvalid
157+
}
158+
159+
let [message] = await tx
160+
.select()
161+
.from(messages)
162+
.where(eq(messages.chatId, chatId))
163+
.orderBy(desc(messages.messageId))
164+
.limit(1)
156165

157-
let [message] = await db
158-
.select()
159-
.from(messages)
160-
.where(eq(messages.chatId, chatId))
161-
.orderBy(desc(messages.messageId))
162-
.limit(1)
166+
const newLastMsgId = message?.messageId ?? null
167+
await tx.update(chats).set({ lastMsgId: newLastMsgId }).where(eq(chats.id, chatId))
163168

164-
const newLastMsgId = message?.messageId ?? null
165-
await db.update(chats).set({ lastMsgId: newLastMsgId }).where(eq(chats.id, chatId))
169+
return newLastMsgId
170+
})
166171
}

‎server/src/db/models/messages.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,6 @@ async function deleteMessages(messageIds: bigint[], chatId: number) {
202202
)
203203
.returning()
204204

205-
console.log("deleted", deleted)
206-
207205
if (deleted.length === 0) {
208206
log.trace("messages not found", { messageIds, chatId })
209207
throw ModelError.MessageInvalid

0 commit comments

Comments
 (0)
Failed to load comments.