Created
July 5, 2022 09:45
-
-
Save VoltanBro/9b4fbd151ecdb4c07bea4dd0e865b1c4 to your computer and use it in GitHub Desktop.
stripe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # frozen_string_literal: true | |
| class CustomerCreator < BaseInteractor | |
| def call | |
| validate_bot_owner | |
| create_stripe_customer | |
| end | |
| private | |
| def validate_bot_owner | |
| return if bot_owner? | |
| context.fail!(error: I18n.t('stripe.customer.errors.wrong_user'), status: :forbidden) | |
| end | |
| def bot_owner? | |
| context.user_profile.bot_owner? | |
| end | |
| def create_stripe_customer | |
| context.stripe_customer = if check_current_customer&.id.present? | |
| context.user_profile.stripe_customer | |
| else | |
| context.user_profile.create_stripe_customer(customer_id: new_stripe_customer.id) | |
| end | |
| end | |
| def current_customer_id | |
| @current_customer_id = context.user_profile.stripe_customer&.customer_id | |
| end | |
| def check_current_customer | |
| check_stripe_customer if current_customer_id.present? | |
| end | |
| def check_stripe_customer | |
| Stripe::Customer.retrieve(current_customer_id) | |
| rescue Stripe::StripeError => e | |
| context.stripe_error = e.message | |
| end | |
| def new_stripe_customer | |
| ::Stripe::Adapter.create_customer(params: params) | |
| rescue Stripe::StripeError => e | |
| context.fail!(error: e.message, status: :unprocessable_entity) | |
| end | |
| def params | |
| { email: context.user_profile.user.email } | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment