Packages

A production-grade, fully-typed Elixir client for the SumUp API (Checkouts, Readers, Customers, Transactions, Payouts, Receipts, Members, Memberships, Roles and Merchants) with telemetry, retries, cursor streaming, webhook handling, and RFC 9457 aware error handling.

Current section

Files

Jump to
sumup lib sumup customer.ex
Raw

lib/sumup/customer.ex

defmodule Sumup.Customer do
@moduledoc "A vaulted SumUp customer, used to store payment instruments for later reuse."
@type personal_details :: %{
optional(:first_name) => String.t(),
optional(:last_name) => String.t(),
optional(:email) => String.t(),
optional(:phone) => String.t(),
optional(:birth_date) => String.t(),
optional(:tax_id) => String.t(),
optional(:address) => map()
}
@type t :: %__MODULE__{
customer_id: String.t(),
personal_details: personal_details(),
raw: map()
}
defstruct [:customer_id, personal_details: %{}, raw: %{}]
@doc false
@spec from_json(map()) :: t()
def from_json(json) when is_map(json) do
%__MODULE__{
customer_id: json["customer_id"],
personal_details: atomize_shallow(json["personal_details"] || %{}),
raw: json
}
end
defp atomize_shallow(map) do
Map.new(map, fn {k, v} -> {String.to_atom(k), v} end)
end
end