From 3abd839c1bbb5f79c200426aba8a06df16f4a448 Mon Sep 17 00:00:00 2001 From: Jaideep Guntupalli Date: Sat, 23 Mar 2024 11:21:34 +0530 Subject: [PATCH] refactored to independent methods --- .../messages/facebook/message_builder.rb | 29 ++++++++-------- .../messages/instagram/message_builder.rb | 33 ++++++++++--------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/app/builders/messages/facebook/message_builder.rb b/app/builders/messages/facebook/message_builder.rb index a1ebdd1e5..53c6147e6 100644 --- a/app/builders/messages/facebook/message_builder.rb +++ b/app/builders/messages/facebook/message_builder.rb @@ -53,24 +53,25 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder end def conversation - @conversation ||= begin - lock_to_single_conversation = @inbox.lock_to_single_conversation + @conversation ||= set_conversation_based_on_inbox_config + end - if lock_to_single_conversation - Conversation.find_by(conversation_params) || build_conversation - else - # If lock to single conversation is disabled, we will create a new conversation if previous conversation is resolved - last_conversation = Conversation.where(conversation_params).order(created_at: :desc).first - - if last_conversation.nil? || last_conversation.resolved? - build_conversation - else - last_conversation - end - end + def set_conversation_based_on_inbox_config + if @inbox.lock_to_single_conversation + Conversation.find_by(conversation_params) || build_conversation + else + find_or_build_for_multiple_conversations end end + def find_or_build_for_multiple_conversations + # If lock to single conversation is disabled, we will create a new conversation if previous conversation is resolved + last_conversation = Conversation.where(conversation_params).where.not(status: :resolved).order(created_at: :desc).first + return build_conversation if last_conversation.nil? + + last_conversation + end + def build_conversation Conversation.create!(conversation_params.merge( contact_inbox_id: @contact_inbox.id diff --git a/app/builders/messages/instagram/message_builder.rb b/app/builders/messages/instagram/message_builder.rb index 805787a4d..e527f0921 100644 --- a/app/builders/messages/instagram/message_builder.rb +++ b/app/builders/messages/instagram/message_builder.rb @@ -69,23 +69,26 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder end def conversation - @conversation ||= begin - lock_to_single_conversation = @inbox.lock_to_single_conversation + @conversation ||= set_conversation_based_on_inbox_config + end - if lock_to_single_conversation - Conversation.where(conversation_params) - .find_by("additional_attributes ->> 'type' = 'instagram_direct_message'") || build_conversation - else - # If lock to single conversation is disabled, we will create a new conversation if previous conversation is resolved - last_conversation = Conversation.where(conversation_params) - .where("additional_attributes ->> 'type' = 'instagram_direct_message'").order(created_at: :desc).first + def set_conversation_based_on_inbox_config + if @inbox.lock_to_single_conversation + Conversation.where(conversation_params) + .find_by("additional_attributes ->> 'type' = 'instagram_direct_message'") || build_conversation + else + find_or_build_for_multiple_conversations + end + end - if last_conversation.nil? || last_conversation.resolved? - build_conversation - else - last_conversation - end - end + def find_or_build_for_multiple_conversations + last_conversation = Conversation.where(conversation_params) + .where("additional_attributes ->> 'type' = 'instagram_direct_message'").order(created_at: :desc).first + + if last_conversation.nil? || last_conversation.resolved? + build_conversation + else + last_conversation end end