lib/placetel_api/api/groups.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.Groups do
  @moduledoc """
  API calls for all endpoints tagged `Groups`.
  """

  alias PlacetelAPI.Connection
  import PlacetelAPI.RequestBuilder

  @doc """
  Delete a group
  Delete a group by its ID

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Fetch all groups
  Fetch a list of all groups

  ### Parameters

  - `connection` (PlacetelAPI.Connection): Connection to server
  - `opts` (keyword): Optional parameters
    - `:"filter[name]"` (String.t): 
    - `:"filter[description]"` (String.t): 
    - `:"filter[type]"` (String.t): 
    - `:page` (integer()): Page of results to fetch.
    - `:per_page` (integer()): Number of results to return per page.

  ### Returns

  - `{:ok, [%Group{}, ...]}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_groups(Tesla.Env.client(), keyword()) ::
          {:ok, list(PlacetelAPI.Model.Group.t())} | {:error, Tesla.Env.t()}
  def get_groups(connection, opts \\ []) do
    optional_params = %{
      :"filter[name]" => :query,
      :"filter[description]" => :query,
      :"filter[type]" => :query,
      :page => :query,
      :per_page => :query
    }

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

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

  @doc """
  Fetch a group
  Fetch a groups by its ID

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Create a group
  Create a new group

  ### Parameters

  - `connection` (PlacetelAPI.Connection): Connection to server
  - `groups` (PostGroups): 
  - `opts` (keyword): Optional parameters

  ### Returns

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

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

  @doc """
  Update a group
  Update a group by its ID

  ### Parameters

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

  ### Returns

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

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