Packages

Elixir client SDK for the Surge API

Current section

Files

Jump to
surge_api lib surge accounts.ex
Raw

lib/surge/accounts.ex

defmodule Surge.Accounts do
@moduledoc """
Functions for managing Surge accounts.
"""
alias Surge.Accounts.Account
alias Surge.Accounts.AccountStatus
alias Surge.Client
@doc """
Archives an account and releases all associated resources.
> #### Warning {: .warning}
>
> This action will:
> * Release all phone numbers associated with the account
> * Deactivate all campaigns
> * Make the account unusable for sending messages
>
> This operation is irreversible. If you need to send SMS in the future, you
> will need to re-register new phone numbers and campaigns.
## Examples
Surge.Accounts.archive("acct_01jpqjvfg9enpt7pyxd60pcmxj")
#=> {:ok, %Surge.Accounts.Account{}}
client = Surge.Client.new("your_api_key")
Surge.Accounts.archive(client, "acct_01jpqjvfg9enpt7pyxd60pcmxj")
#=> {:ok, %Surge.Accounts.Account{}}
"""
@spec archive(String.t()) :: {:ok, Account.t()} | {:error, Surge.Error.t()}
@spec archive(Client.t(), String.t()) :: {:ok, Account.t()} | {:error, Surge.Error.t()}
def archive(client \\ Client.default_client(), account_id)
def archive(%Client{} = client, account_id) do
opts = [path_params: [account_id: account_id]]
case Client.request(client, :delete, "/accounts/:account_id", opts) do
{:ok, data} -> {:ok, Account.from_json(data)}
error -> error
end
end
@doc """
Creates a new Account within the calling Platform.
## Examples
Surge.Accounts.create(%{name: "Test Account"})
#=> {:ok, %Surge.Accounts.Account{}}
client = Surge.Client.new("your_api_key")
Surge.Accounts.create(client, %{name: "Test Account"})
#=> {:ok, %Surge.Accounts.Account{}}
"""
@spec create(map()) :: {:ok, Account.t()} | {:error, Surge.Error.t()}
@spec create(Client.t(), map()) :: {:ok, Account.t()} | {:error, Surge.Error.t()}
def create(client \\ Client.default_client(), params)
def create(%Client{} = client, params) do
case Client.request(client, :post, "/accounts", json: params) do
{:ok, data} -> {:ok, Account.from_json(data)}
error -> error
end
end
@doc """
Checks an account's status and capabilities.
## Examples
Surge.Accounts.get_status("acct_123", [:local_messaging])
#=> {:ok, %Surge.Accounts.AccountStatus{capabilities: %{local_messaging: %{status: :ready}}}}
client = Surge.Client.new("your_api_key")
Surge.Accounts.get_status(client, "acct_123", [:local_messaging])
#=> {:ok, %Surge.Accounts.AccountStatus{capabilities: %{local_messaging: %{status: :ready}}}}
"""
@spec get_status(String.t(), list(AccountStatus.capability())) ::
{:ok, AccountStatus.t()} | {:error, Surge.Error.t()}
@spec get_status(Client.t(), String.t(), list(AccountStatus.capability())) ::
{:ok, AccountStatus.t()} | {:error, Surge.Error.t()}
def get_status(client \\ Client.default_client(), account_id, capabilities)
def get_status(%Client{} = client, account_id, capabilities) do
params = %{"capabilities" => Enum.join(capabilities, ",")}
opts = [params: params, path_params: [account_id: account_id]]
case Client.request(client, :get, "/accounts/:account_id/status", opts) do
{:ok, data} -> {:ok, AccountStatus.from_json(data)}
error -> error
end
end
@doc """
Updates an Account
## Examples
Surge.Accounts.update("acct_123", %{name: "Updated Account"})
#=> {:ok, %Surge.Accounts.Account{name: "Updated Account"}}
client = Surge.Client.new("your_api_key")
Surge.Accounts.update(client, "acct_123", %{name: "Updated"})
#=> {:ok, %Surge.Accounts.Account{}}
"""
@spec update(String.t(), map()) :: {:ok, Account.t()} | {:error, Surge.Error.t()}
@spec update(Client.t(), String.t(), map()) :: {:ok, Account.t()} | {:error, Surge.Error.t()}
def update(client \\ Client.default_client(), account_id, params)
def update(%Client{} = client, account_id, params) do
opts = [json: params, path_params: [account_id: account_id]]
case Client.request(client, :patch, "/accounts/:account_id", opts) do
{:ok, data} -> {:ok, Account.from_json(data)}
error -> error
end
end
end