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