Class: SpreeKlaviyo::CreateOrUpdateProfile

Inherits:
Base
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_klaviyo/create_or_update_profile.rb

Instance Method Summary collapse

Instance Method Details

#call(klaviyo_integration:, user:, guest_id: nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/services/spree_klaviyo/create_or_update_profile.rb', line 5

def call(klaviyo_integration:, user:, guest_id: nil)
  return failure(false, ::Spree.t('admin.integrations.klaviyo.not_found')) unless klaviyo_integration

  if user.klaviyo_id.blank?
    fetch_profile_result = FetchProfile.call(klaviyo_integration: klaviyo_integration, user: user)

    if fetch_profile_result.success?
      return klaviyo_integration.update_profile(user, guest_id) if guest_id.present?

      return fetch_profile_result
    end

    klaviyo_integration.create_profile(user).tap do |result|
      user.update!(klaviyo_id: JSON.parse(result.value).dig('data', 'id')) if result.success?
    end
  end

  klaviyo_integration.update_profile(user)
end