Module: BetterAuth::Stripe::Routes::ListActiveSubscriptions

Defined in:
lib/better_auth/stripe/routes/list_active_subscriptions.rb

Class Method Summary collapse

Class Method Details

.endpoint(config) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/better_auth/stripe/routes/list_active_subscriptions.rb', line 9

def endpoint(config)
  BetterAuth::Endpoint.new(path: "/subscription/list", method: "GET") do |ctx|
    session = BetterAuth::Routes.current_session(ctx)
    query = BetterAuth::Plugins.normalize_hash(ctx.query)
    customer_type = BetterAuth::Plugins.stripe_customer_type!(query)
    reference_id = BetterAuth::Plugins.stripe_reference_id!(ctx, session, customer_type, query[:reference_id], config)
    BetterAuth::Plugins.stripe_authorize_reference!(ctx, session, reference_id, "list-subscription", customer_type, BetterAuth::Plugins.stripe_subscription_options(config), explicit: query.key?(:reference_id))
    plans = BetterAuth::Plugins.stripe_plans(config)
    subscriptions = ctx.context.adapter.find_many(model: "subscription", where: [{field: "referenceId", value: reference_id}]).select { |entry| BetterAuth::Plugins.stripe_active_or_trialing?(entry) }
    ctx.json(subscriptions.map do |entry|
      plan = plans.find { |item| item[:name].to_s.downcase == entry["plan"].to_s.downcase }
      price_id = if entry["billingInterval"] == "year"
        plan&.fetch(:annual_discount_price_id, nil) || plan&.fetch(:price_id, nil)
      else
        plan&.fetch(:price_id, nil)
      end
      entry.merge("limits" => plan&.fetch(:limits, nil), "priceId" => price_id)
    end)
  end
end