Current section
Files
Jump to
Current section
Files
lib/surge/users.ex
defmodule Surge.Users do
@moduledoc """
Functions for managing Surge users.
"""
alias Surge.Client
alias Surge.Users.User
@doc """
Creates a new User object.
## Examples
Surge.Users.create("acc_123", %{
email: "user@example.com",
name: "John Doe",
role: "admin"
})
#=> {:ok, %Surge.Users.User{}}
client = Surge.Client.new("your_api_key")
Surge.Users.create(client, "acc_123", %{email: "test@example.com"})
#=> {:ok, %Surge.Users.User{}}
"""
@spec create(String.t(), map()) :: {:ok, User.t()} | {:error, Surge.Error.t()}
@spec create(Client.t(), String.t(), map()) :: {:ok, User.t()} | {:error, Surge.Error.t()}
def create(client \\ Client.default_client(), account_id, params)
def create(%Client{} = client, account_id, params) do
opts = [json: params, path_params: [account_id: account_id]]
case Client.request(client, :post, "/accounts/:account_id/users", opts) do
{:ok, data} -> {:ok, User.from_json(data)}
error -> error
end
end
@doc """
Provides a mechanism for having Surge create a signed token for embeds instead
of signing with your own signing key.
## Examples
Surge.Users.create_token("usr_123", %{duration_seconds: 3600})
#=> {:ok, "eyJ..."}
client = Surge.Client.new("your_api_key")
Surge.Users.create_token(client, "usr_123", %{})
#=> {:ok, "eyJ..."}
"""
@spec create_token(String.t(), map()) :: {:ok, map()} | {:error, Surge.Error.t()}
@spec create_token(Client.t(), String.t(), map()) :: {:ok, map()} | {:error, Surge.Error.t()}
def create_token(client \\ Client.default_client(), user_id, params)
def create_token(%Client{} = client, user_id, params) do
opts = [json: params, path_params: [user_id: user_id]]
case Client.request(client, :post, "/users/:user_id/tokens", opts) do
{:ok, response_body} -> {:ok, response_body["token"]}
error -> error
end
end
@doc """
Deletes a user.
Once a user has been deleted, they will no longer be permitted to access any
of the embedded components. Attempting to access a deleted user will return a
404 Not Found error.
## Examples
Surge.Users.delete("usr_01j9dwavghe1ttppewekjjkfrx")
#=> {:ok, %Surge.Users.User{}}
client = Surge.Client.new("your_api_key")
Surge.Users.delete(client, "usr_01j9dwavghe1ttppewekjjkfrx")
#=> {:ok, %Surge.Users.User{}}
"""
@spec delete(String.t()) :: {:ok, User.t()} | {:error, Surge.Error.t()}
@spec delete(Client.t(), String.t()) :: {:ok, User.t()} | {:error, Surge.Error.t()}
def delete(client \\ Client.default_client(), user_id)
def delete(%Client{} = client, user_id) do
opts = [path_params: [id: user_id]]
case Client.request(client, :delete, "/users/:id", opts) do
{:ok, data} -> {:ok, User.from_json(data)}
error -> error
end
end
@doc """
Retrieves a User object.
## Examples
Surge.Users.get("usr_123")
#=> {:ok, %Surge.Users.User{id: "usr_123", ...}}
client = Surge.Client.new("your_api_key")
Surge.Users.get(client, "usr_123")
#=> {:ok, %Surge.Users.User{}}
"""
@spec get(String.t()) :: {:ok, User.t()} | {:error, Surge.Error.t()}
@spec get(Client.t(), String.t()) :: {:ok, User.t()} | {:error, Surge.Error.t()}
def get(client \\ Client.default_client(), user_id)
def get(%Client{} = client, user_id) do
case Client.request(client, :get, "/users/:user_id", path_params: [user_id: user_id]) do
{:ok, data} -> {:ok, User.from_json(data)}
error -> error
end
end
@doc """
Updates an existing User object.
## Examples
Surge.Users.update("usr_123", %{first_name: "Jane"})
#=> {:ok, %Surge.Users.User{id: "usr_123", first_name: "Jane"}}
client = Surge.Client.new("your_api_key")
Surge.Users.update(client, "usr_123", %{first_name: "Sally"})
#=> {:ok, %Surge.Users.User{id: "usr_123", first_name: "Sally"}}
"""
@spec update(String.t(), map()) :: {:ok, User.t()} | {:error, Surge.Error.t()}
@spec update(Client.t(), String.t(), map()) :: {:ok, User.t()} | {:error, Surge.Error.t()}
def update(client \\ Client.default_client(), user_id, params)
def update(%Client{} = client, user_id, params) do
opts = [json: params, path_params: [user_id: user_id]]
case Client.request(client, :patch, "/users/:user_id", opts) do
{:ok, data} -> {:ok, User.from_json(data)}
error -> error
end
end
end