diff --git a/lib/shared/dm-ops/delete-entry-spec.js b/lib/shared/dm-ops/delete-entry-spec.js --- a/lib/shared/dm-ops/delete-entry-spec.js +++ b/lib/shared/dm-ops/delete-entry-spec.js @@ -1,5 +1,6 @@ // @flow +import invariant from 'invariant'; import uuid from 'uuid'; import type { @@ -33,7 +34,11 @@ const messageData = createMessageDataFromDMOperation(dmOperation); return { messageDatas: [messageData] }; }, - processDMOperation: async (dmOperation: DMDeleteEntryOperation) => { + processDMOperation: async ( + dmOperation: DMDeleteEntryOperation, + viewerID: string, + utilities: ProcessDMOperationUtilities, + ) => { const { threadID, creatorID, @@ -45,28 +50,36 @@ messageID, } = dmOperation; + const rawEntryInfo = utilities.entryInfos[entryID]; const messageData = createMessageDataFromDMOperation(dmOperation); const rawMessageInfos = [ rawMessageInfoFromMessageData(messageData, messageID), ]; + invariant(rawEntryInfo?.thick, 'Entry thread should be thick'); + let rawEntryInfoToUpdate: ThickRawEntryInfo = rawEntryInfo; const date = dateFromString(dateString); - const rawEntryInfo: ThickRawEntryInfo = { - id: entryID, - threadID, - text: prevText, - year: date.getFullYear(), - month: date.getMonth() + 1, - day: date.getDate(), - creationTime, - creatorID, - thick: true, - deleted: true, - lastUpdatedTime, - }; + + const timestamp = rawEntryInfoToUpdate.lastUpdatedTime; + + if (timestamp < lastUpdatedTime) { + rawEntryInfoToUpdate = { + id: entryID, + threadID, + text: prevText, + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate(), + creationTime, + creatorID, + thick: true, + deleted: true, + lastUpdatedTime, + }; + } const entryUpdateInfo: EntryUpdateInfo = { - entryInfo: rawEntryInfo, + entryInfo: rawEntryInfoToUpdate, type: updateTypes.UPDATE_ENTRY, id: uuid.v4(), time: lastUpdatedTime,