mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
29 lines
713 B
Ruby
29 lines
713 B
Ruby
# frozen_string_literal: true
|
|
|
|
class OrderPaymentFinder
|
|
def initialize(order)
|
|
@order = order
|
|
end
|
|
|
|
def last_payment
|
|
last(@order.payments)
|
|
end
|
|
|
|
def last_pending_payment
|
|
last(@order.pending_payments)
|
|
end
|
|
|
|
private
|
|
|
|
# `max_by` avoids additional database queries when payments are loaded
|
|
# already. There is usually only one payment and this shouldn't cause
|
|
# any overhead compared to `order(:created_at).last`. Using `last`
|
|
# without order is not deterministic.
|
|
#
|
|
# We are not using `updated_at` because all payments are touched when the
|
|
# order is updated and then all payments have the same `updated_at` value.
|
|
def last(payments)
|
|
payments.max_by(&:created_at)
|
|
end
|
|
end
|