From e2853b9afbecc9ef9bfbab497a705304b42b6016 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Thu, 11 Feb 2021 10:53:16 +0100 Subject: [PATCH] Do not load order twice The controller already does so, then, we can pass it to the service and avoid that extra round-trip to the DB and save some memory. Spree::Order is a rather bulky object (God object code smell perhaps) and it'll surely make a difference. --- app/controllers/spree/orders_controller.rb | 2 +- app/services/process_payment_intent.rb | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/controllers/spree/orders_controller.rb b/app/controllers/spree/orders_controller.rb index 345ca4a2c3..40c315400c 100644 --- a/app/controllers/spree/orders_controller.rb +++ b/app/controllers/spree/orders_controller.rb @@ -25,8 +25,8 @@ module Spree before_action :check_at_least_one_line_item, only: :update def show - ProcessPaymentIntent.new(params["payment_intent"], params[:id]).call! @order = Spree::Order.find_by!(number: params[:id]) + ProcessPaymentIntent.new(params["payment_intent"], @order).call! end def empty diff --git a/app/services/process_payment_intent.rb b/app/services/process_payment_intent.rb index a4932159ca..28b7636868 100644 --- a/app/services/process_payment_intent.rb +++ b/app/services/process_payment_intent.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true class ProcessPaymentIntent - def initialize(payment_intent, order_number) + def initialize(payment_intent, order) @payment_intent = payment_intent - @order = Spree::Order.find_by!(number: order_number) - @last_payment = OrderPaymentFinder.new(@order).last_payment + @order = order + @last_payment = OrderPaymentFinder.new(order).last_payment end def call! @@ -16,8 +16,10 @@ class ProcessPaymentIntent private + attr_reader :order + def valid? - @order.present? && valid_intent_string? && matches_last_payment? + order.present? && valid_intent_string? && matches_last_payment? end def valid_intent_string?