From 7d8f5582461aa08edf205dac9c449c10e1edac7a Mon Sep 17 00:00:00 2001 From: xyqyear Date: Fri, 22 Nov 2024 23:16:13 +0800 Subject: [PATCH 1/2] fix: branching and forking sometimes break conversation structure --- api/models/Message.js | 4 +++- api/server/utils/import/importBatchBuilder.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/api/models/Message.js b/api/models/Message.js index ccff9cb485c..0d807f6bfde 100644 --- a/api/models/Message.js +++ b/api/models/Message.js @@ -73,15 +73,17 @@ async function saveMessage(req, params, metadata) { * @async * @function bulkSaveMessages * @param {Object[]} messages - An array of message objects to save. + * @param {boolean} [overrideTimestamp=false] - Indicates whether to override the timestamps of the messages. Defaults to false. * @returns {Promise} The result of the bulk write operation. * @throws {Error} If there is an error in saving messages in bulk. */ -async function bulkSaveMessages(messages) { +async function bulkSaveMessages(messages, overrideTimestamp=false) { try { const bulkOps = messages.map((message) => ({ updateOne: { filter: { messageId: message.messageId }, update: message, + timestamps: !overrideTimestamp, upsert: true, }, })); diff --git a/api/server/utils/import/importBatchBuilder.js b/api/server/utils/import/importBatchBuilder.js index 16b4f0ffdaf..f42e675eb97 100644 --- a/api/server/utils/import/importBatchBuilder.js +++ b/api/server/utils/import/importBatchBuilder.js @@ -99,7 +99,7 @@ class ImportBatchBuilder { async saveBatch() { try { await bulkSaveConvos(this.conversations); - await bulkSaveMessages(this.messages); + await bulkSaveMessages(this.messages, true); logger.debug( `user: ${this.requestUserId} | Added ${this.conversations.length} conversations and ${this.messages.length} messages to the DB.`, ); From cb98456ba034a86857adaeaa564d2ac7f17cebc8 Mon Sep 17 00:00:00 2001 From: xyqyear Date: Fri, 22 Nov 2024 23:22:25 +0800 Subject: [PATCH 2/2] fix test for forking. --- api/server/utils/import/fork.spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api/server/utils/import/fork.spec.js b/api/server/utils/import/fork.spec.js index f4f4a2b81ee..003f83ab2ff 100644 --- a/api/server/utils/import/fork.spec.js +++ b/api/server/utils/import/fork.spec.js @@ -104,7 +104,7 @@ describe('forkConversation', () => { expect(bulkSaveMessages).toHaveBeenCalledWith( expect.arrayContaining( expectedMessagesTexts.map((text) => expect.objectContaining({ text })), - ), + ), true, ); }); @@ -122,7 +122,7 @@ describe('forkConversation', () => { expect(bulkSaveMessages).toHaveBeenCalledWith( expect.arrayContaining( expectedMessagesTexts.map((text) => expect.objectContaining({ text })), - ), + ), true, ); }); @@ -141,7 +141,7 @@ describe('forkConversation', () => { expect(bulkSaveMessages).toHaveBeenCalledWith( expect.arrayContaining( expectedMessagesTexts.map((text) => expect.objectContaining({ text })), - ), + ), true, ); }); @@ -160,7 +160,7 @@ describe('forkConversation', () => { expect(bulkSaveMessages).toHaveBeenCalledWith( expect.arrayContaining( expectedMessagesTexts.map((text) => expect.objectContaining({ text })), - ), + ), true, ); });