# frozen_string_literal: true
require "value_semantics/monkey_patched"
require_relative "../admin_action"
class AdminAction
class ResetDeclines < AdminAction
class Command
def self.for(target_customer, **)
target_customer.declines.then { |declines|
AdminAction::ResetDeclines.for(
customer_id: target_customer.customer_id,
previous_value: declines
)
}
end
end
def customer_id
@attributes[:customer_id]
end
def previous_value
@attributes[:previous_value].to_i
end
def forward
CustomerFinancials.new(customer_id).set_declines(0).then { self }
end
# I could make sure here that they're still set to 0 in the reverse case, so
# I know there haven't been any declines since I ran the command, but I
# think I don't care actually, and I should just set it back to what it was
# and trust the human knows what they're doing
def reverse
CustomerFinancials.new(customer_id).set_declines(previous_value)
.then { self }
end
def to_s
"reset_declines(#{customer_id}): #{previous_value} -> 0"
end
end
end