Skip to content

Commit a640b20

Browse files
committed
Setup notifier and signal module
Send error signals when failing to link stripe accounts
1 parent e361e9e commit a640b20

File tree

4 files changed

+69
-4
lines changed

4 files changed

+69
-4
lines changed

lib/algora/notifier.ex

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
defmodule Algora.Notifier do
2+
@moduledoc false
3+
def notify_welcome_org(_user, _org) do
4+
:ok
5+
end
6+
7+
def notify_welcome_developer(_user) do
8+
:ok
9+
end
10+
11+
def notify_stripe_account_link_error(_user, _error) do
12+
:ok
13+
end
14+
end

lib/algora/payments/errors.ex

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
defmodule Algora.Payments.StripeAccountLinkError do
2+
@moduledoc false
3+
defexception [:message]
4+
end
5+
6+
defmodule Algora.Payments.StripeAccountCreateError do
7+
@moduledoc false
8+
defexception [:message]
9+
end
10+
11+
defmodule Algora.Payments.StripeAccountDeleteError do
12+
@moduledoc false
13+
defexception [:message]
14+
end

lib/algora/signal.ex

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
defmodule Algora.Signal do
2+
@moduledoc false
3+
@provider Appsignal
4+
5+
defdelegate send_error(exception, stacktrace), to: @provider
6+
defdelegate send_error(kind, reason, stacktrace), to: @provider
7+
8+
def send_stripe_error(%Stripe.Error{} = error, exception, stacktrace \\ nil) do
9+
case error do
10+
%{extra: %{raw_error: %{"message" => message}}} ->
11+
send_error(%{exception | message: message}, stacktrace)
12+
13+
_error ->
14+
send_error(%{exception | message: "Unknown Stripe error"}, stacktrace)
15+
end
16+
end
17+
end

lib/algora_web/live/user/transactions_live.ex

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ defmodule AlgoraWeb.User.TransactionsLive do
77

88
alias Algora.Accounts.User
99
alias Algora.Payments
10+
alias Algora.Payments.StripeAccountCreateError
11+
alias Algora.Payments.StripeAccountDeleteError
12+
alias Algora.Payments.StripeAccountLinkError
1013
alias Algora.Stripe.ConnectCountries
1114
alias Algora.Util
1215

@@ -79,8 +82,16 @@ defmodule AlgoraWeb.User.TransactionsLive do
7982

8083
def handle_event("setup_payout_account", _params, socket) do
8184
case Payments.create_account_link(socket.assigns.account, AlgoraWeb.Endpoint.url()) do
82-
{:ok, %{url: url}} -> {:noreply, redirect(socket, external: url)}
83-
{:error, _reason} -> {:noreply, put_flash(socket, :error, "Something went wrong")}
85+
{:ok, %{url: url}} ->
86+
{:noreply, redirect(socket, external: url)}
87+
88+
{:error, %Stripe.Error{} = error} ->
89+
Algora.Notifier.notify_stripe_account_link_error(socket.assigns.current_user, error)
90+
Algora.Signal.send_stripe_error(error, %StripeAccountLinkError{})
91+
{:noreply, put_flash(socket, :error, "Failed to link payout account for your country")}
92+
93+
{:error, _reason} ->
94+
{:noreply, put_flash(socket, :error, "Something went wrong")}
8495
end
8596
end
8697

@@ -98,8 +109,13 @@ defmodule AlgoraWeb.User.TransactionsLive do
98109
{:ok, %{url: url}} <- Payments.create_account_link(account, AlgoraWeb.Endpoint.url()) do
99110
{:noreply, redirect(socket, external: url)}
100111
else
101-
{:error, _reason} ->
112+
{:error, %Stripe.Error{} = error} ->
113+
Algora.Notifier.notify_stripe_account_link_error(socket.assigns.current_user, error)
114+
Algora.Signal.send_stripe_error(error, %StripeAccountCreateError{})
102115
{:noreply, put_flash(socket, :error, "Failed to create payout account")}
116+
117+
{:error, _reason} ->
118+
{:noreply, put_flash(socket, :error, "Something went wrong")}
103119
end
104120
else
105121
{:noreply, assign(socket, :payout_account_form, to_form(changeset))}
@@ -124,11 +140,15 @@ defmodule AlgoraWeb.User.TransactionsLive do
124140
|> assign(:show_manage_payout_drawer, false)
125141
|> put_flash(:info, "Payout account deleted successfully")}
126142

143+
{:error, %Stripe.Error{} = error} ->
144+
Algora.Signal.send_stripe_error(error, %StripeAccountDeleteError{})
145+
{:noreply, put_flash(socket, :error, "Failed to delete payout account")}
146+
127147
{:error, _reason} ->
128148
{:noreply,
129149
socket
130150
|> assign(:show_delete_confirmation, false)
131-
|> put_flash(:error, "Failed to delete payout account")}
151+
|> put_flash(:error, "Something went wrong")}
132152
end
133153
end
134154

0 commit comments

Comments
 (0)