From 61849d84e79e53484aee7b3b85b1dde2f8816d2b Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 7 May 2023 19:57:06 +0100 Subject: [PATCH] Extract order capturing to OrderCaptureService --- app/controllers/api/v0/orders_controller.rb | 10 ++++------ app/services/order_capture_service.rb | 22 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 app/services/order_capture_service.rb diff --git a/app/controllers/api/v0/orders_controller.rb b/app/controllers/api/v0/orders_controller.rb index 3f23a32e40..f36157db21 100644 --- a/app/controllers/api/v0/orders_controller.rb +++ b/app/controllers/api/v0/orders_controller.rb @@ -47,17 +47,15 @@ module Api def capture authorize! :admin, order - pending_payment = order.pending_payments.first + payment_capture = OrderCaptureService.new(order) - return payment_capture_failed unless order.payment_required? && pending_payment - - if pending_payment.capture! + if payment_capture.call render json: order.reload, serializer: Api::Admin::OrderSerializer, status: :ok + elsif payment_capture.gateway_error.present? + error_during_processing(payment_capture.gateway_error) else payment_capture_failed end - rescue Spree::Core::GatewayError => e - error_during_processing(e) end private diff --git a/app/services/order_capture_service.rb b/app/services/order_capture_service.rb new file mode 100644 index 0000000000..78e69c9a1d --- /dev/null +++ b/app/services/order_capture_service.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +# Use `authorize! :admin order` before calling this service + +class OrderCaptureService + attr_reader :gateway_error + + def initialize(order) + @order = order + @gateway_error = nil + end + + def call + return false unless @order.payment_required? + return false unless (pending_payment = @order.pending_payments.first) + + pending_payment.capture! + rescue Spree::Core::GatewayError => e + @gateway_error = e + false + end +end