Skip to content

Commit 30f03f4

Browse files
committed
enhance payout account management
1 parent 0312cfa commit 30f03f4

File tree

6 files changed

+260
-57
lines changed

6 files changed

+260
-57
lines changed

lib/algora/integrations/stripe/connect_countries.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ defmodule Algora.Stripe.ConnectCountries do
126126
{"Vietnam", "VN"}
127127
]
128128

129+
@spec from_code(String.t()) :: String.t()
130+
def from_code(code) do
131+
list() |> Enum.find(&(elem(&1, 1) == code)) |> elem(0) || code
132+
end
133+
129134
@spec list_codes() :: [String.t()]
130135
def list_codes, do: Enum.map(list(), &elem(&1, 1))
131136

lib/algora/payments/payments.ex

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@ defmodule Algora.Payments do
134134
|> Repo.all()
135135
end
136136

137+
@spec get_or_create_account(user_id :: binary(), region :: :US | :EU) :: Account.t()
138+
def get_or_create_account(user_id, region) do
139+
case get_account(user_id, region) do
140+
nil -> create_account(user_id, region)
141+
account -> {:ok, account}
142+
end
143+
end
144+
145+
@spec get_account(user_id :: binary(), region :: :US | :EU) :: Account.t() | nil
137146
def get_account(user_id, region) do
138147
Account
139148
|> where([a], a.user_id == ^user_id and a.region == ^region)
@@ -199,6 +208,10 @@ defmodule Algora.Payments do
199208
with {:ok, stripe_account} <- Stripe.Account.retrieve(account.provider_id) do
200209
attrs = %{
201210
charges_enabled: stripe_account.charges_enabled,
211+
payouts_enabled: stripe_account.payouts_enabled,
212+
payout_interval: stripe_account.settings.payouts.schedule.interval,
213+
payout_speed: stripe_account.settings.payouts.schedule.delay_days,
214+
default_currency: stripe_account.default_currency,
202215
details_submitted: stripe_account.details_submitted,
203216
country: stripe_account.country,
204217
service_agreement: get_service_agreement(stripe_account),
@@ -234,4 +247,11 @@ defmodule Algora.Payments do
234247
defp get_service_agreement(%{capabilities: capabilities}) do
235248
if is_nil(capabilities[:card_payments]), do: "recipient", else: "full"
236249
end
250+
251+
@spec delete_account(account :: Account.t()) :: {:ok, Account.t()} | {:error, any()}
252+
def delete_account(account) do
253+
with {:ok, _stripe_account} <- Stripe.Account.delete(account.provider_id) do
254+
Repo.delete(account)
255+
end
256+
end
237257
end

lib/algora/payments/schemas/account.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ defmodule Algora.Payments.Account do
1313
field :name, :string
1414
field :details_submitted, :boolean, default: false, null: false
1515
field :charges_enabled, :boolean, default: false, null: false
16+
field :payouts_enabled, :boolean, default: false, null: false
17+
field :payout_interval, :string
18+
field :payout_speed, :integer
19+
field :default_currency, :string
1620
field :service_agreement, :string
1721
field :country, :string, null: false
1822
field :type, Ecto.Enum, values: [:standard, :express], null: false
@@ -32,6 +36,10 @@ defmodule Algora.Payments.Account do
3236
:provider_meta,
3337
:details_submitted,
3438
:charges_enabled,
39+
:payouts_enabled,
40+
:payout_interval,
41+
:payout_speed,
42+
:default_currency,
3543
:service_agreement,
3644
:country,
3745
:type,
@@ -45,6 +53,7 @@ defmodule Algora.Payments.Account do
4553
:provider_meta,
4654
:details_submitted,
4755
:charges_enabled,
56+
:payouts_enabled,
4857
:country,
4958
:type,
5059
:region,

lib/algora_web/components/ui/drawer.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ defmodule AlgoraWeb.Components.UI.Drawer do
4545
"fixed z-50 transform border bg-background transition-transform duration-300 ease-in-out",
4646
case @direction do
4747
"bottom" -> "inset-x-0 bottom-0 rounded-t-xl"
48-
"right" -> "inset-y-0 right-0 h-full max-w-lg"
48+
"right" -> "inset-y-0 right-0 h-full max-w-lg w-full"
4949
end,
5050
case @direction do
5151
"bottom" -> if(@show, do: "translate-y-0", else: "translate-y-full")

0 commit comments

Comments
 (0)