defmodule Requests.Payments.Destinations.BankAccount do
alias Customers.AccountHolder
alias Customers.BillingAddress
@type bank :: %{
name: String.t(),
branch: String.t(),
address: BillingAddress.t()
}
@type t :: %__MODULE__{
type: String.t(),
account_type: String.t(),
account_number: String.t(),
bank_code: String.t(),
branch_code: String.t(),
iban: String.t(),
bban: String.t(),
swift_bic: String.t(),
country: <<_::2>>,
account_holder: AccountHolder.t(),
bank: bank()
}
@enforce_keys [:type, :country]
defstruct [
:type,
:account_type,
:account_number,
:bank_code,
:branch_code,
:iban,
:bban,
:swift_bic,
:country,
:account_holder,
:bank
]
def build(params) when is_map(params) do
%{
type: params[:type],
account_type: params[:account_type],
account_number: params[:account_type],
bank_code: params[:bank_code],
branch_code: params[:branch_code],
iban: params[:iban],
bban: params[:bban],
swift_bic: params[:swift_bic],
country: params[:country],
account_holder: AccountHolder.build(params[:account_type]),
bank: build_bank(params[:bank])
}
end
def build(_), do: nil
defp build_bank(params) when is_map(params) do
%{
name: params[:name],
branch: params[:branch],
address: BillingAddress.build(params[:address])
}
end
defp build_bank(_), do: nil
end