Я разрабатывал обработчик Stripe Webhook для создания/обновления записей в зависимости от значений.Как высушить обработчики Webhook в Rails
Это не очень сложно, если это так просто, как показано ниже;
StripeEvent.configure do |events|
events.subscribe 'charge.succeeded' do |event|
charge = event.data.object
StripeMailer.receipt(charge).deliver
StripeMailer.admin_charge_succeeded(charge).deliver
end
end
Однако, если мне нужно хранить данные условно, это может быть немного грязнее. Здесь я извлек каждый обработчик Webhook и определил что-то вроде stripe_handlers/blahblah_handler.rb
.
class InvoicePaymentFailed
def call(event)
invoice_obj = event.data.object
charge_obj = retrieve_charge_obj_of(invoice_obj)
invoice = Invoice.find_by(stripe_invoice_id: charge_obj[:invoice])
# common execution for subscription
invoice.account.subscription.renew_billing_period(start_at: invoice_obj[:period_start], end_at: invoice_obj[:period_end])
case invoice.state
when 'pending'
invoice.fail!(:processing,
amount_due: invoice[:amount_due],
error: {
code: charge_obj[:failure_code],
message: charge_obj[:failure_message]
})
when 'past_due'
invoice.failed_final_attempt!
end
invoice.next_attempt_at = Utils.unix_time_to_utc(invoice_obj[:next_payment_attempt].to_i)
invoice.attempt_count = invoice_obj[:attempt_count].to_i
invoice.save
end
private
def retrieve_charge_obj_of(invoice)
charge_obj = Stripe::Charge.retrieve(id: invoice.charge)
return charge_obj
rescue Stripe::InvalidRequestError, Stripe::AuthenticationError, Stripe::APIConnectionError, Stripe::StripeError => e
logger.error e
logger.error e.backtrace.join("\n")
end
end
end
Мне просто интересно, как я могу сушить этот обработчик Webhook.
Есть ли какая-то передовая практика, чтобы подойти к этим или любым идеям?
Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что вопросы о работе с рефакторингом лучше подходят для http://codereview.stackexchange.com/. –