Sha256: 7bbf1923cb5551adfe34c691682183d86753612d1af522075c0d7c08285456f5

Contents?: true

Size: 1.23 KB

Versions: 3

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

module SolidusGraphqlApi
  module Mutations
    module Checkout
      class AddPaymentToCheckout < BaseMutation
        null true

        argument :payment_method_id, ID, required: true, loads: Types::PaymentMethod
        argument :amount, Float, required: false
        argument :source, Types::Json, required: false

        field :order, Types::Order, null: true
        field :errors, [Types::UserError], null: false

        def resolve(payment_method:, source:, amount: nil)
          current_order.update(state: :payment)

          update_params = {
            payments_attributes: [{
              payment_method_id: payment_method.id,
              amount: amount || current_order.total,
              source_attributes: source
            }]
          }

          if Spree::OrderUpdateAttributes.new(current_order, update_params).apply
            current_order.recalculate
            errors = []
          else
            errors = current_order.errors
          end

          { errors: user_errors('order', errors), order: current_order }
        end

        private

        def ready?(*)
          current_ability.authorize!(:update, current_order, guest_token)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
solidus_graphql_api-0.3.1 lib/solidus_graphql_api/mutations/checkout/add_payment_to_checkout.rb
solidus_graphql_api-0.3.0 lib/solidus_graphql_api/mutations/checkout/add_payment_to_checkout.rb
solidus_graphql_api-0.2.0 lib/solidus_graphql_api/mutations/checkout/add_payment_to_checkout.rb