|
|
|
|
@@ -3,8 +3,9 @@ class ContactIdentifyAction
|
|
|
|
|
|
|
|
|
|
def perform
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
@contact = merge_contact(existing_identified_contact, @contact) if merge_contacts?(existing_identified_contact, @contact)
|
|
|
|
|
@contact = merge_contact(existing_email_contact, @contact) if merge_contacts?(existing_email_contact, @contact)
|
|
|
|
|
merge_if_existing_identified_contact
|
|
|
|
|
merge_if_existing_email_contact
|
|
|
|
|
merge_if_existing_phone_number_contact
|
|
|
|
|
update_contact
|
|
|
|
|
end
|
|
|
|
|
@contact
|
|
|
|
|
@@ -16,6 +17,18 @@ class ContactIdentifyAction
|
|
|
|
|
@account ||= @contact.account
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def merge_if_existing_identified_contact
|
|
|
|
|
@contact = merge_contact(existing_identified_contact, @contact) if merge_contacts?(existing_identified_contact, @contact)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def merge_if_existing_email_contact
|
|
|
|
|
@contact = merge_contact(existing_email_contact, @contact) if merge_contacts?(existing_email_contact, @contact)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def merge_if_existing_phone_number_contact
|
|
|
|
|
@contact = merge_contact(existing_phone_number_contact, @contact) if merge_contacts?(existing_phone_number_contact, @contact)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def existing_identified_contact
|
|
|
|
|
return if params[:identifier].blank?
|
|
|
|
|
|
|
|
|
|
@@ -28,6 +41,12 @@ class ContactIdentifyAction
|
|
|
|
|
@existing_email_contact ||= Contact.where(account_id: account.id).find_by(email: params[:email])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def existing_phone_number_contact
|
|
|
|
|
return if params[:phone_number].blank?
|
|
|
|
|
|
|
|
|
|
@existing_phone_number_contact ||= Contact.where(account_id: account.id).find_by(phone_number: params[:phone_number])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def merge_contacts?(existing_contact, _contact)
|
|
|
|
|
existing_contact && existing_contact.id != @contact.id
|
|
|
|
|
end
|
|
|
|
|
@@ -36,7 +55,9 @@ class ContactIdentifyAction
|
|
|
|
|
custom_attributes = params[:custom_attributes] ? @contact.custom_attributes.merge(params[:custom_attributes]) : @contact.custom_attributes
|
|
|
|
|
# blank identifier or email will throw unique index error
|
|
|
|
|
# TODO: replace reject { |_k, v| v.blank? } with compact_blank when rails is upgraded
|
|
|
|
|
@contact.update!(params.slice(:name, :email, :identifier).reject { |_k, v| v.blank? }.merge({ custom_attributes: custom_attributes }))
|
|
|
|
|
@contact.update!(params.slice(:name, :email, :identifier, :phone_number).reject do |_k, v|
|
|
|
|
|
v.blank?
|
|
|
|
|
end.merge({ custom_attributes: custom_attributes }))
|
|
|
|
|
ContactAvatarJob.perform_later(@contact, params[:avatar_url]) if params[:avatar_url].present?
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|