# frozen_string_literal: true class Webhooks::Chargebee SUPPORTED_EVENTS = [:subscription_created, :subscription_trial_end_reminder, :subscription_activated, :subscription_cancelled, :subscription_reactivated, :subscription_deleted, :subscription_renewed, :payment_source_added, :subscription_changed].freeze attr_accessor :params, :account def initialize(params) @params = params end def consume send(event_name) if supported_event? end private def event_name @params[:event_type] end def customer_id @params[:content][:customer][:id] end def trial_ends_on trial_end = @params[:content][:subscription][:trial_end] DateTime.strptime(trial_end, '%s') end def supported_event? SUPPORTED_EVENTS.include?(event_name.to_sym) end def subscription @subscriptiom ||= Subscription.find_by(stripe_customer_id: customer_id) end def subscription_created Raven.capture_message("subscription created for #{customer_id}") end def subscription_changed if subscription.expiry != trial_ends_on subscription.expiry = trial_ends_on subscription.save subscription.trial! end end def subscription_trial_end_reminder # Raven.capture_message("subscription trial end reminder for #{customer_id}") end def subscription_activated subscription.active! Raven.capture_message("subscription activated for #{customer_id}") end def subscription_cancelled # if there is a reason field in response. Then cancellation is due to payment failure subscription.cancelled! Raven.capture_message("subscription cancelled for #{customer_id}") end def subscription_reactivated # TODO: send mail to user that account is reactivated subscription.active! Raven.capture_message("subscription reactivated for #{customer_id}") end def subscription_renewed # TODO: Needs this to show payment history. Raven.capture_message("subscription renewed for #{customer_id}") end def subscription_deleted; end def payment_source_added Raven.capture_message("payment source added for #{customer_id}") subscription.payment_source_added! end end