f2ff5af4f5
* Sync owner email to Stripe when changed When an account owner changes their email address, update the corresponding Stripe customer record via a background job. Also handles ownership transfers: when a user becomes the account owner, their email is synced to Stripe. Responsibility chain: - User::NotifiesAccountOfEmailChange triggers on owner identity change or when a user becomes owner - Account::Billing#owner_email_changed enqueues sync job - Account::SyncStripeCustomerEmailJob performs the update with polynomial backoff retries - Account::Subscription#sync_customer_email_to_stripe calls Stripe API * Address PR feedback: error handling and test coverage - Handle Stripe::InvalidRequestError in sync_customer_email_to_stripe (mirrors cancel method behavior for deleted customers) - Add test for deactivated owner (owner with nil identity) - Add test for deleted Stripe customer scenario
51 lines
1.1 KiB
Ruby
51 lines
1.1 KiB
Ruby
module Account::Billing
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
has_one :subscription, class_name: "Account::Subscription", dependent: :destroy
|
|
has_one :billing_waiver, class_name: "Account::BillingWaiver", dependent: :destroy
|
|
|
|
set_callback :incinerate, :before, -> { subscription&.cancel }
|
|
set_callback :cancel, :after, -> { subscription&.pause }
|
|
set_callback :reactivate, :before, -> { subscription&.resume }
|
|
end
|
|
|
|
def plan
|
|
active_subscription&.plan || Plan.free
|
|
end
|
|
|
|
def subscribed?
|
|
subscription.present?
|
|
end
|
|
|
|
def comped?
|
|
billing_waiver.present?
|
|
end
|
|
|
|
def comp
|
|
create_billing_waiver unless billing_waiver
|
|
end
|
|
|
|
def uncomp
|
|
billing_waiver&.destroy
|
|
reload_billing_waiver
|
|
end
|
|
|
|
def owner_email_changed
|
|
Account::SyncStripeCustomerEmailJob.perform_later(subscription) if subscription
|
|
end
|
|
|
|
private
|
|
def active_subscription
|
|
if comped?
|
|
comped_subscription
|
|
elsif subscription&.active?
|
|
subscription
|
|
end
|
|
end
|
|
|
|
def comped_subscription
|
|
@comped_subscription ||= billing_waiver&.subscription
|
|
end
|
|
end
|