defmodule Requests.Payments.Sources.NetworkToken do
alias Customers.BillingAddress
alias Customers.Phone
@type t :: %__MODULE__{
type: String.t(),
token: String.t(),
expiry_month: integer(),
expiry_year: integer(),
token_type: String.t(),
cryptogram: String.t(),
eci: String.t(),
stored: true | false,
name: String.t(),
cvv: String.t(),
billing_address: BillingAddress.t(),
phone: Phone.t()
}
@enforce_keys [:type, :token, :expiry_month, :expiry_year, :token_type, :cryptogram, :eci]
defstruct [
:type,
:token,
:expiry_month,
:expiry_year,
:token_type,
:cryptogram,
:eci,
:stored,
:name,
:cvv,
:billing_address,
:phone
]
def build(raw_params) when is_map(raw_params) do
params =
Enum.into(raw_params, %{}, fn {key, value} -> {String.to_existing_atom(key), value} end)
%{
type: params[:type],
token: params[:token],
expiry_month: params[:expiry_month],
expiry_year: params[:expiry_year],
token_type: params[:token_type],
cryptogram: params[:cryptogram],
eci: params[:eci],
stored: params[:stored],
name: params[:name],
cvv: params[:cvv],
billing_address: BillingAddress.build(params[:billing_address]),
phone: Phone.build(params[:phone])
}
end
def build(_), do: nil
end