Skip to content

Instantly share code, notes, and snippets.

@aloukissas
Created February 4, 2020 08:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aloukissas/dda59c35e497056fb854e7f374b81508 to your computer and use it in GitHub Desktop.
Save aloukissas/dda59c35e497056fb854e7f374b81508 to your computer and use it in GitHub Desktop.
def create_subscription(email, plan_id, payment_method_id) do
with {:user_lookup, %User{customer_id: nil, name: name} = user} <-
{:user_lookup, Repo.get_by(User, email: email)},
{:customer_creation, {:ok, %Stripe.Customer{id: customer_id}}} <-
{:customer_creation,
Stripe.Customer.create(%{
name: name,
email: email,
payment_method: payment_method_id,
invoice_settings: %{
default_payment_method: payment_method_id
}
})},
{:subscription_creation, {:ok, %Stripe.Subscription{id: subscription_id}}} <-
{:subscription_creation,
Stripe.Subscription.create(%{customer: customer_id, items: [%{plan: plan_id}]})},
{:user_update, {:ok, %User{}}} <-
{:user_update,
User.update(user, %{customer_id: customer_id, subscription_id: subscription_id})} do
{:ok, :subscription_created}
else
{:user_lookup, _} ->
{:error, :user_lookup_error}
{:customer_creation, _} ->
{:error, :customer_creation_error}
{:subscription_creation, _} ->
{:error, :subscription_creation_error}
{:user_update, _} ->
{:error, :user_update_error}
err ->
{:error, err}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment