Sha256: ffd622dfd1f40d92bb676dbf0f9d627aa73025efd59f738e116b48acf1959063

Contents?: true

Size: 1.86 KB

Versions: 2

Compression:

Stored size: 1.86 KB

Contents

module Workarea
  module GlobalE
    module Api
      class SendOrderToMerchant::SaveUser
        attr_reader :user_id, :shipping_details, :billing_details, :culture_code

        def self.perform!(user_id, shipping_details:, billing_details:, culture_code:)
          new(
            user_id,
            shipping_details: shipping_details,
            billing_details: billing_details,
            culture_code: culture_code
          ).perform!
        end

        # @param user_id [String, BSON::ObjectId]
        # @param shipping_details [Workarea::GlobalE::Merchant::CustomerDetails]
        # @param billing_details [Workarea::GlobalE::Merchant::CustomerDetails]
        # @param culture_code [String]
        #
        def initialize(user_id, shipping_details:, billing_details:, culture_code:)
          @user_id = user_id
          @shipping_details = shipping_details
          @billing_details = billing_details
          @culture_code = culture_code
        end

        def perform!
          return if user.nil?
          upsert_address(shipping_details)
          upsert_address(billing_details)
          user.global_e_culture_code = culture_code

          user.save
        end

        private

          def user
            @user ||= Workarea::User.find user_id rescue nil
          end

          # @param customer_details [Workarea::GlobalE::Merchant::CustomerDetails]
          #
          def upsert_address(customer_details)
            existing_address = user.addresses.detect do |user_address|
              user_address.id.to_s == customer_details.address_book_id.to_s
            end

            if existing_address.present?
              existing_address.attributes = customer_details.workarea_address_attributes
            else
              user.addresses.build customer_details.workarea_address_attributes
            end
          end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
workarea-global_e-1.3.0 app/services/workarea/global_e/api/send_order_to_merchant/save_user.rb
workarea-global_e-1.2.1 app/services/workarea/global_e/api/send_order_to_merchant/save_user.rb