defmodule Requests.Customers.Create do
@moduledoc false
alias Customers.Phone
@derive Jason.Encoder
@type t() :: %__MODULE__{
email: String.t(),
name: String.t(),
phone: Phone.t(),
metadata: map(),
instruments: list(),
default: String.t()
}
@enforce_keys [:email]
defstruct [
:email,
:name,
:phone,
:metadata,
:instruments,
:default
]
def build(%{email: email} = params) when is_binary(email) do
%__MODULE__{
email: params[:email],
name: params[:name],
phone: Phone.build(params[:phone]),
metadata: params[:metadata],
instruments: params[:instruments],
default: params[:default]
}
end
def build(params) when is_map(params), do: {:error, "Create customer must have an email"}
def build(_), do: nil
end