lib/placetel_api/api/contacts.ex

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

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

  alias PlacetelAPI.Connection
  import PlacetelAPI.RequestBuilder

  @doc """
  Deletes a contact
  Deletes a contact by its ID

  ### Parameters

  - `connection` (PlacetelAPI.Connection): Connection to server
  - `id` (integer()): Contact ID
  - `opts` (keyword): Optional parameters

  ### Returns

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

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

  @doc """
  Get all contacts
  Provides a list of all contacts

  ### Parameters

  - `connection` (PlacetelAPI.Connection): Connection to server
  - `opts` (keyword): Optional parameters
    - `:"filter[speeddial]"` (integer()): 
    - `:"filter[first_name]"` (String.t): 
    - `:"filter[last_name]"` (String.t): 
    - `:"filter[company]"` (String.t): 
    - `:"filter[email]"` (String.t): 
    - `:"filter[email_work]"` (String.t): 
    - `:"filter[phone_work]"` (String.t): 
    - `:"filter[mobile_work]"` (String.t): 
    - `:"filter[phone]"` (String.t): 
    - `:"filter[mobile]"` (String.t): 
    - `:"filter[blocked]"` (boolean()): 
    - `:"search[number]"` (String.t): 
    - `:page` (integer()): Page of results to fetch.
    - `:per_page` (integer()): Number of results to return per page.

  ### Returns

  - `{:ok, [%Contact{}, ...]}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_contacts(Tesla.Env.client(), keyword()) ::
          {:ok, list(PlacetelAPI.Model.Contact.t())} | {:error, Tesla.Env.t()}
  def get_contacts(connection, opts \\ []) do
    optional_params = %{
      :"filter[speeddial]" => :query,
      :"filter[first_name]" => :query,
      :"filter[last_name]" => :query,
      :"filter[company]" => :query,
      :"filter[email]" => :query,
      :"filter[email_work]" => :query,
      :"filter[phone_work]" => :query,
      :"filter[mobile_work]" => :query,
      :"filter[phone]" => :query,
      :"filter[mobile]" => :query,
      :"filter[blocked]" => :query,
      :"search[number]" => :query,
      :page => :query,
      :per_page => :query
    }

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

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, [%PlacetelAPI.Model.Contact{}]}
    ])
  end

  @doc """
  Retrieve a contact
  Fetches a contact by its ID

  ### Parameters

  - `connection` (PlacetelAPI.Connection): Connection to server
  - `id` (integer()): ID of a contact
  - `opts` (keyword): Optional parameters

  ### Returns

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

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, %PlacetelAPI.Model.Contact{}}
    ])
  end

  @doc """
  Create a contact
  Creates a contact

  ### Parameters

  - `connection` (PlacetelAPI.Connection): Connection to server
  - `contacts` (PostContacts): 
  - `opts` (keyword): Optional parameters

  ### Returns

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

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {201, %PlacetelAPI.Model.Contact{}}
    ])
  end

  @doc """
  Update a contact
  Updates a contact for a given ID

  ### Parameters

  - `connection` (PlacetelAPI.Connection): Connection to server
  - `id` (integer()): Contact ID
  - `contacts` (PutContacts): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, PlacetelAPI.Model.Contact.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec put_contacts_id(
          Tesla.Env.client(),
          integer(),
          PlacetelAPI.Model.PutContacts.t(),
          keyword()
        ) :: {:ok, PlacetelAPI.Model.Contact.t()} | {:error, Tesla.Env.t()}
  def put_contacts_id(connection, id, contacts, _opts \\ []) do
    request =
      %{}
      |> method(:put)
      |> url("/contacts/#{id}")
      |> add_param(:body, :body, contacts)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, %PlacetelAPI.Model.Contact{}}
    ])
  end
end