lib/spatio/api/contacts.ex

# NOTE: This file is auto generated by OpenAPI Generator 7.22.0 (https://openapi-generator.tech).
# Do not edit this file manually.

defmodule Spatio.Api.Contacts do
  @moduledoc """
  API calls for all endpoints tagged `Contacts`.
  """

  alias Spatio.Connection
  import Spatio.RequestBuilder

  @doc """
  Assign a category to a contact.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `assign_contact_category_request` (AssignContactCategoryRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec assign_contact_category(Tesla.Env.client, String.t, Spatio.Model.AssignContactCategoryRequest.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def assign_contact_category(connection, id, assign_contact_category_request, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/contacts/#{id}/categories")
      |> add_param(:body, :body, assign_contact_category_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {204, false},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Create a contact.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `create_contact_request` (CreateContactRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.Contact.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec create_contact(Tesla.Env.client, Spatio.Model.CreateContactRequest.t, keyword()) :: {:ok, Spatio.Model.Contact.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def create_contact(connection, create_contact_request, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/contacts")
      |> add_param(:body, :body, create_contact_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {201, Spatio.Model.Contact},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Create a contact category.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `create_contact_category_request` (CreateContactCategoryRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.ContactCategory.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec create_contact_category(Tesla.Env.client, Spatio.Model.CreateContactCategoryRequest.t, keyword()) :: {:ok, Spatio.Model.ContactCategory.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def create_contact_category(connection, create_contact_category_request, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/contacts/categories")
      |> add_param(:body, :body, create_contact_category_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {201, Spatio.Model.ContactCategory},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Delete a contact.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec delete_contact(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def delete_contact(connection, id, _opts \\ []) do
    request =
      %{}
      |> method(:delete)
      |> url("/v1/contacts/#{id}")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {204, false},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Delete a category.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec delete_contact_category(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def delete_contact_category(connection, id, _opts \\ []) do
    request =
      %{}
      |> method(:delete)
      |> url("/v1/contacts/categories/#{id}")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {204, false},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Fetch a contact.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.Contact.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_contact(Tesla.Env.client, String.t, keyword()) :: {:ok, Spatio.Model.Contact.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def get_contact(connection, id, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/contacts/#{id}")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.Contact},
      {401, Spatio.Model.ApiError},
      {404, Spatio.Model.ApiError}
    ])
  end

  @doc """
  List contact categories. Requires `organization_id` query param.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `organization_id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.ContactCategoryListResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec list_contact_categories(Tesla.Env.client, String.t, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.ContactCategoryListResponse.t} | {:error, Tesla.Env.t}
  def list_contact_categories(connection, organization_id, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/contacts/categories")
      |> add_param(:query, :organization_id, organization_id)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.ContactCategoryListResponse},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  List supported contact providers (native + OAuth-connected).

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.ContactProviderListResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec list_contact_providers(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.ContactProviderListResponse.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def list_contact_providers(connection, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/contacts/providers")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.ContactProviderListResponse},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  List the caller's contacts (across providers).

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters
    - `:limit` (integer()): 
    - `:provider` (String.t): 
    - `:search` (String.t): 

  ### Returns

  - `{:ok, Spatio.Model.ContactListResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec list_contacts(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.ContactListResponse.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def list_contacts(connection, opts \\ []) do
    optional_params = %{
      :limit => :query,
      :provider => :query,
      :search => :query
    }

    request =
      %{}
      |> method(:get)
      |> url("/v1/contacts")
      |> add_optional_params(optional_params, opts)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.ContactListResponse},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Remove a category from a contact.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `category_id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec unassign_contact_category(Tesla.Env.client, String.t, String.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def unassign_contact_category(connection, id, category_id, _opts \\ []) do
    request =
      %{}
      |> method(:delete)
      |> url("/v1/contacts/#{id}/categories/#{category_id}")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {204, false},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Update a contact.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `update_contact_request` (UpdateContactRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.Contact.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec update_contact(Tesla.Env.client, String.t, Spatio.Model.UpdateContactRequest.t, keyword()) :: {:ok, Spatio.Model.Contact.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def update_contact(connection, id, update_contact_request, _opts \\ []) do
    request =
      %{}
      |> method(:patch)
      |> url("/v1/contacts/#{id}")
      |> add_param(:body, :body, update_contact_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.Contact},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Update a category.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `update_contact_category_request` (UpdateContactCategoryRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.ContactCategory.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec update_contact_category(Tesla.Env.client, String.t, Spatio.Model.UpdateContactCategoryRequest.t, keyword()) :: {:ok, Spatio.Model.ContactCategory.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def update_contact_category(connection, id, update_contact_category_request, _opts \\ []) do
    request =
      %{}
      |> method(:patch)
      |> url("/v1/contacts/categories/#{id}")
      |> add_param(:body, :body, update_contact_category_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.ContactCategory},
      {401, Spatio.Model.ApiError}
    ])
  end
end