This is a nice simple first one.
I set the declines to 0, and on Undo I set it back to what it was
before.
There's no extra form or information, it just does the thing.
@@ -0,0 +1,44 @@
+# 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
@@ -42,6 +42,14 @@ class CustomerFinancials
end
end
+ def set_declines(num)
+ if num.positive?
+ REDIS.set("jmp_pay_decline-#{@customer_id}", num)
+ else
+ REDIS.del("jmp_pay_decline-#{@customer_id}")
+ end
+ end
+
class TransactionInfo
value_semantics do
transaction_id String