discourse-subscriptions/app/controllers/user/subscriptions_controller.rb

67 lines
1.8 KiB
Ruby
Raw Normal View History

2019-10-31 22:43:09 -04:00
# frozen_string_literal: true
module DiscoursePatrons
module User
class SubscriptionsController < ::ApplicationController
include DiscoursePatrons::Stripe
2019-11-28 17:01:56 -05:00
include DiscoursePatrons::Group
2019-10-31 22:43:09 -04:00
before_action :set_api_key
requires_login
def index
begin
plans = ::Stripe::Plan.list(
expand: ['data.product']
)
2019-10-31 22:43:09 -04:00
customers = ::Stripe::Customer.list(
email: current_user.email,
expand: ['data.subscriptions']
)
subscriptions = customers[:data].map do |customer|
customer[:subscriptions][:data]
end.flatten(1)
subscriptions.map! do |subscription|
plan = plans[:data].find { |p| p[:id] == subscription[:plan][:id] }
subscription.to_h.merge(product: plan[:product].to_h.slice(:id, :name))
end
2019-10-31 22:43:09 -04:00
render_json_dump subscriptions
rescue ::Stripe::InvalidRequestError => e
return render_json_error e.message
end
end
2019-11-04 00:37:21 -05:00
def destroy
begin
2019-11-25 19:09:54 -05:00
subscription = ::Stripe::Subscription.retrieve(params[:id])
2019-11-04 00:37:21 -05:00
2019-11-25 19:09:54 -05:00
customer = Customer.find_by(
user_id: current_user.id,
2019-11-28 16:15:46 -05:00
customer_id: subscription[:customer],
product_id: subscription[:plan][:product]
2019-11-25 19:09:54 -05:00
)
2019-11-11 20:43:23 -05:00
2019-11-25 19:09:54 -05:00
if customer.present?
deleted = ::Stripe::Subscription.delete(params[:id])
customer.delete
group = plan_group(subscription[:plan])
group.remove(current_user) if group
2019-11-25 19:09:54 -05:00
render_json_dump deleted
else
2019-11-28 16:15:46 -05:00
render_json_error I18n.t('discourse_patrons.customer_not_found')
2019-11-11 20:43:23 -05:00
end
2019-11-04 00:37:21 -05:00
rescue ::Stripe::InvalidRequestError => e
return render_json_error e.message
end
end
2019-10-31 22:43:09 -04:00
end
end
end