Billing upgrade/downgrade, inviti in app e diretta YouTube da mobile.

Upgrade Stripe con addebito immediato; downgrade programmato a fine periodo.
UX billing più sobria con box info; icone piani. API inviti e OAuth YouTube
per staff trasmissione; deep link join; scelta partita programmata o nuova.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-02 22:15:27 +02:00
parent 2cb267f991
commit 566104aff4
49 changed files with 1615 additions and 173 deletions

View File

@@ -69,6 +69,10 @@ module Billing
infer_interval_from_price(stripe_sub) ||
PriceCatalog::DEFAULT_INTERVAL
sub = club.subscription
clear_pending = sub&.pending_plan_id.present? &&
(sub.pending_plan.slug == plan.slug || infer_plan_slug_from_price(stripe_sub) == sub.pending_plan.slug)
Billing::AssignPlan.call(
club: club,
plan_slug: plan.slug,
@@ -79,7 +83,10 @@ module Billing
current_period_start: period_start,
current_period_end: period_end,
cancel_at_period_end: stripe_sub.cancel_at_period_end,
billing_interval: billing_interval
billing_interval: billing_interval,
pending_plan_id: clear_pending ? nil : sub&.pending_plan_id,
pending_billing_interval: clear_pending ? nil : sub&.pending_billing_interval,
stripe_schedule_id: clear_pending ? nil : sub&.stripe_schedule_id
}
)
end