From 2d62a7724888378cd829936d2f1a4dd187a966ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 23 Aug 2023 18:07:05 -0400 Subject: [PATCH] fix: #11947, make user message has a numeric timestamp --- src/upgrades/3.3.0/chat_room_refactor.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/upgrades/3.3.0/chat_room_refactor.js b/src/upgrades/3.3.0/chat_room_refactor.js index 8ae39ee1dc7e..2585f1ad8b5b 100644 --- a/src/upgrades/3.3.0/chat_room_refactor.js +++ b/src/upgrades/3.3.0/chat_room_refactor.js @@ -40,22 +40,27 @@ module.exports = { const { roomId } = roomData; const uids = await db.getSortedSetRange(`chat:room:${roomId}:uids`, 0, -1); for (const uid of uids) { - await batch.processSortedSet(`uid:${uid}:chat:room:${roomId}:mids`, async (mids) => { - const uniqMids = mids.filter(mid => !midsSeen.hasOwnProperty(mid)); + await batch.processSortedSet(`uid:${uid}:chat:room:${roomId}:mids`, async (userMessageData) => { + const uniqMessages = userMessageData.filter(m => !midsSeen.hasOwnProperty(m.value)); + const uniqMids = uniqMessages.map(m => m.value); if (!uniqMids.length) { return; } let messageData = await db.getObjects(uniqMids.map(mid => `message:${mid}`)); messageData.forEach((m, idx) => { - if (m) { + if (m && uniqMessages[idx]) { m.mid = parseInt(uniqMids[idx], 10); + m.timestamp = m.timestamp || uniqMessages[idx].score || 0; } }); messageData = messageData.filter(Boolean); const bulkSet = messageData.map( - msg => [`message:${msg.mid}`, { roomId: roomId }] + msg => [`message:${msg.mid}`, { + roomId: roomId, + timestamp: m.timestamp, + }] ); await db.setObjectBulk(bulkSet); @@ -69,6 +74,7 @@ module.exports = { }); }, { batch: 500, + withScores: true, }); // eslint-disable-next-line no-await-in-loop await db.deleteAll(`uid:${uid}:chat:room:${roomId}:mids`);