defmodule Requests.Instruments.UpdateCard do
alias Customers.AccountHolder
@derive Jason.Encoder
@type t :: %__MODULE__{
type: String.t(),
id: String.t(),
expiry_month: integer(),
expiry_year: integer(),
name: String.t(),
account_holder: %AccountHolder{},
customer: %{
id: String.t(),
default: true | false
}
}
defstruct [
:type,
:id,
:expiry_month,
:expiry_year,
:name,
:account_holder,
:customer
]
def build(%{id: id} = params) when is_binary(id) and id != "" do
%__MODULE__{
id: id,
type: params[:type],
expiry_month: params[:expiry_month],
expiry_year: params[:expiry_year],
name: params[:name],
account_holder: AccountHolder.build(params[:account_holder]),
customer: build_customer(params[:customer])
}
end
def build(params) when is_map(params), do: {:error, "Card must have an id"}
def build(_), do: {:error, "params must be a map"}
defp build_customer(params) when is_map(params) do
%{
default: params[:default],
id: params[:id]
}
end
defp build_customer(_), do: nil
end