Packages

Unofficial Elixir client for the Yapily Open Banking API v12 — payments, data, VRP, hosted pages, enrichment, and more.

Current section

Files

Jump to
yapily_client lib yapily_client services users.ex
Raw

lib/yapily_client/services/users.ex

defmodule YapilyClient.Users do
@moduledoc "Payment Service User (PSU) management."
alias YapilyClient.Services.Base
alias YapilyClient.Types.User
@doc "Lists all users for the application."
@spec list(YapilyClient.Config.t(), keyword()) :: {:ok, [User.t()]} | {:error, term()}
def list(config, opts \\ []) do
params =
if id = Keyword.get(opts, :application_user_id),
do: [{"applicationUserId", id}],
else: []
Base.get(config, "/users", params: params)
|> Base.unwrap_list(&User.cast/1)
end
@doc "Creates a new user with the given `application_user_id`."
@spec create(YapilyClient.Config.t(), String.t()) :: {:ok, User.t()} | {:error, term()}
def create(config, application_user_id) do
with :ok <- Base.require_string(application_user_id, :application_user_id) do
Base.post(config, "/users", %{"applicationUserId" => application_user_id})
|> Base.unwrap_cast(&User.cast/1)
end
end
@doc "Returns a single user by Yapily UUID."
@spec get(YapilyClient.Config.t(), String.t()) :: {:ok, User.t()} | {:error, term()}
def get(config, user_uuid) do
with :ok <- Base.require_string(user_uuid, :user_uuid) do
Base.get(config, "/users/#{user_uuid}")
|> Base.unwrap_cast(&User.cast/1)
end
end
@doc "Deletes a user and revokes all of their consents."
@spec delete(YapilyClient.Config.t(), String.t()) :: :ok | {:error, term()}
def delete(config, user_uuid) do
with :ok <- Base.require_string(user_uuid, :user_uuid) do
case Base.delete(config, "/users/#{user_uuid}") do
{:ok, _} -> :ok
{:error, _} = err -> err
end
end
end
@doc "Updates a user's `application_user_id`."
@spec update(YapilyClient.Config.t(), String.t(), String.t()) ::
{:ok, User.t()} | {:error, term()}
def update(config, user_uuid, new_application_user_id) do
with :ok <-
Base.validate_all([
Base.require_string(user_uuid, :user_uuid),
Base.require_string(new_application_user_id, :application_user_id)
]) do
Base.put(config, "/users/#{user_uuid}", %{"applicationUserId" => new_application_user_id})
|> Base.unwrap_cast(&User.cast/1)
end
end
end