diff --git a/app/models/message.rb b/app/models/message.rb index 4b33d53c6..91901d026 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -102,9 +102,12 @@ class Message < ApplicationRecord # [:external_created_at] : Can specify if the message was created at a different timestamp externally # [:external_error : Can specify if the message creation failed due to an error at external API # [:is_reaction] : Used to denote if the message is a reaction and differentiate it from a simple reply message + # [:is_edited, :previous_content] : Used to indicated edited message and previous content (before edit) + store :content_attributes, accessors: [:submitted_email, :items, :submitted_values, :email, :in_reply_to, :deleted, :external_created_at, :story_sender, :story_id, :external_error, - :translations, :in_reply_to_external_id, :is_unsupported, :is_reaction], coder: JSON + :translations, :in_reply_to_external_id, :is_unsupported, + :is_reaction, :is_edited, :previous_content], coder: JSON store :external_source_ids, accessors: [:slack], coder: JSON, prefix: :external_source_id diff --git a/app/services/whatsapp/incoming_message_baileys_service.rb b/app/services/whatsapp/incoming_message_baileys_service.rb index 9b9501024..e18139002 100644 --- a/app/services/whatsapp/incoming_message_baileys_service.rb +++ b/app/services/whatsapp/incoming_message_baileys_service.rb @@ -277,7 +277,7 @@ class Whatsapp::IncomingMessageBaileysService < Whatsapp::IncomingMessageBaseSer raise MessageNotFoundError unless find_message_by_source_id(message_id) update_status if @raw_message.dig(:update, :status).present? - update_message_content if @raw_message.dig(:update, :message).present? + handle_edited_content if @raw_message.dig(:update, :message).present? end def update_status @@ -318,15 +318,15 @@ class Whatsapp::IncomingMessageBaileysService < Whatsapp::IncomingMessageBaseSer true end - def update_message_content - message = @raw_message.dig(:update, :message, :editedMessage, :message) - if message.blank? - Rails.logger.warn 'No valid message content found in the update event' + def handle_edited_content + @raw_message = @raw_message.dig(:update, :message, :editedMessage) + content = message_content + + unless content + Rails.logger.warn 'No valid message content found in the edit event' return end - content = message[:conversation] || message.dig(:extendedTextMessage, :text) - - @message.update!(content: content) if content.present? + @message.update!(content: content, is_edited: true, previous_content: @message.content) end end diff --git a/spec/services/whatsapp/incoming_message_baileys_service_spec.rb b/spec/services/whatsapp/incoming_message_baileys_service_spec.rb index 9b7013c16..ff7ea92db 100644 --- a/spec/services/whatsapp/incoming_message_baileys_service_spec.rb +++ b/spec/services/whatsapp/incoming_message_baileys_service_spec.rb @@ -726,7 +726,10 @@ describe Whatsapp::IncomingMessageBaileysService do described_class.new(inbox: inbox, params: params).perform + original_content = message.content expect(message.reload.content).to eq('New message content') + expect(message.is_edited).to be(true) + expect(message.previous_content).to eq(original_content) end end