defmodule Requests.Customers.Update do
@moduledoc false
alias Customers.Phone
@derive Jason.Encoder
@type t() :: %__MODULE__{
id: String.t(),
email: String.t(),
name: String.t(),
phone: Phone.t(),
metadata: map(),
instruments: list(),
default: String.t()
}
@enforce_keys [:id]
defstruct [
:id,
:email,
:name,
:phone,
:metadata,
:default,
:instruments
]
def build(%{id: id} = params) when is_binary(id) do
%__MODULE__{
id: id,
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, "Update customer must have an id"}
def build(_), do: nil
end