defmodule Requests.Payments.Payment.AmountAllocation do
@moduledoc false
@type commission :: %{
amount: integer(),
percentage: integer()
}
@type t() :: %__MODULE__{
amount: integer(),
commission: commission(),
id: String.t(),
reference: String
}
@enforce_keys [:amount, :id]
defstruct [
:amount,
:commission,
:id,
:reference
]
def build(amount_allocations, return \\ [])
def build([], return), do: Enum.filter(return, &(&1 != nil))
def build([h | t], return) do
build(t, [build_allocation(h) | return])
end
def build(_, _), do: nil
defp build_allocation(params) when is_map(params) do
%{
amount: params[:amount],
commission: build_commission(params[:commission]),
id: params[:id],
reference: params[:reference]
}
end
defp build_allocation(_), do: nil
defp build_commission(params) when is_map(params) do
%{
amount: params[:amount],
percentage: params[:percentage]
}
end
defp build_commission(_), do: nil
end