lib/mail_slurp_api/api/group_controller.ex

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

defmodule MailSlurpAPI.Api.GroupController do
  @moduledoc """
  API calls for all endpoints tagged `GroupController`.
  """

  alias MailSlurpAPI.Connection
  import MailSlurpAPI.RequestBuilder


  @doc """
  Add contacts to a group

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - group_id (String.t): 
  - update_group_contacts (UpdateGroupContacts): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, %MailSlurpAPI.Model.GroupContactsDto{}} on success
  {:error, info} on failure
  """
  @spec add_contacts_to_group(Tesla.Env.client, String.t, MailSlurpAPI.Model.UpdateGroupContacts.t, keyword()) :: {:ok, MailSlurpAPI.Model.GroupContactsDto.t} | {:error, Tesla.Env.t}
  def add_contacts_to_group(connection, group_id, update_group_contacts, _opts \\ []) do
    %{}
    |> method(:put)
    |> url("/groups/#{group_id}/contacts")
    |> add_param(:body, :body, update_group_contacts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %MailSlurpAPI.Model.GroupContactsDto{}}
    ])
  end

  @doc """
  Create a group

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - create_group_options (CreateGroupOptions): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, %MailSlurpAPI.Model.GroupDto{}} on success
  {:error, info} on failure
  """
  @spec create_group(Tesla.Env.client, MailSlurpAPI.Model.CreateGroupOptions.t, keyword()) :: {:ok, MailSlurpAPI.Model.GroupDto.t} | {:error, Tesla.Env.t}
  def create_group(connection, create_group_options, _opts \\ []) do
    %{}
    |> method(:post)
    |> url("/groups")
    |> add_param(:body, :body, create_group_options)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 201, %MailSlurpAPI.Model.GroupDto{}}
    ])
  end

  @doc """
  Delete group

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - group_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, %{}} on success
  {:error, info} on failure
  """
  @spec delete_group(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:error, Tesla.Env.t}
  def delete_group(connection, group_id, _opts \\ []) do
    %{}
    |> method(:delete)
    |> url("/groups/#{group_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 204, false}
    ])
  end

  @doc """
  Get all Contact Groups in paginated format

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :page (integer()): Optional page index in list pagination
    - :size (integer()): Optional page size in list pagination
    - :sort (String.t): Optional createdAt sort direction ASC or DESC
    - :since (DateTime.t): Filter by created at after the given timestamp
    - :before (DateTime.t): Filter by created at before the given timestamp
  ## Returns

  {:ok, %MailSlurpAPI.Model.PageGroupProjection{}} on success
  {:error, info} on failure
  """
  @spec get_all_groups(Tesla.Env.client, keyword()) :: {:ok, MailSlurpAPI.Model.PageGroupProjection.t} | {:error, Tesla.Env.t}
  def get_all_groups(connection, opts \\ []) do
    optional_params = %{
      :"page" => :query,
      :"size" => :query,
      :"sort" => :query,
      :"since" => :query,
      :"before" => :query
    }
    %{}
    |> method(:get)
    |> url("/groups/paginated")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %MailSlurpAPI.Model.PageGroupProjection{}}
    ])
  end

  @doc """
  Get group

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - group_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, %MailSlurpAPI.Model.GroupDto{}} on success
  {:error, info} on failure
  """
  @spec get_group(Tesla.Env.client, String.t, keyword()) :: {:ok, MailSlurpAPI.Model.GroupDto.t} | {:error, Tesla.Env.t}
  def get_group(connection, group_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/groups/#{group_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %MailSlurpAPI.Model.GroupDto{}}
    ])
  end

  @doc """
  Get group and contacts belonging to it

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - group_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, %MailSlurpAPI.Model.GroupContactsDto{}} on success
  {:error, info} on failure
  """
  @spec get_group_with_contacts(Tesla.Env.client, String.t, keyword()) :: {:ok, MailSlurpAPI.Model.GroupContactsDto.t} | {:error, Tesla.Env.t}
  def get_group_with_contacts(connection, group_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/groups/#{group_id}/contacts")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %MailSlurpAPI.Model.GroupContactsDto{}}
    ])
  end

  @doc """
  Get group and paginated contacts belonging to it

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - group_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :page (integer()): Optional page index in group contact pagination
    - :size (integer()): Optional page size in group contact pagination
    - :sort (String.t): Optional createdAt sort direction ASC or DESC
    - :since (DateTime.t): Filter by created at after the given timestamp
    - :before (DateTime.t): Filter by created at before the given timestamp
  ## Returns

  {:ok, %MailSlurpAPI.Model.PageContactProjection{}} on success
  {:error, info} on failure
  """
  @spec get_group_with_contacts_paginated(Tesla.Env.client, String.t, keyword()) :: {:ok, MailSlurpAPI.Model.PageContactProjection.t} | {:error, Tesla.Env.t}
  def get_group_with_contacts_paginated(connection, group_id, opts \\ []) do
    optional_params = %{
      :"page" => :query,
      :"size" => :query,
      :"sort" => :query,
      :"since" => :query,
      :"before" => :query
    }
    %{}
    |> method(:get)
    |> url("/groups/#{group_id}/contacts-paginated")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %MailSlurpAPI.Model.PageContactProjection{}}
    ])
  end

  @doc """
  Get all groups

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, [%GroupProjection{}, ...]} on success
  {:error, info} on failure
  """
  @spec get_groups(Tesla.Env.client, keyword()) :: {:ok, list(MailSlurpAPI.Model.GroupProjection.t)} | {:error, Tesla.Env.t}
  def get_groups(connection, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/groups")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, [%MailSlurpAPI.Model.GroupProjection{}]}
    ])
  end

  @doc """
  Remove contacts from a group

  ## Parameters

  - connection (MailSlurpAPI.Connection): Connection to server
  - group_id (String.t): 
  - update_group_contacts (UpdateGroupContacts): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, %MailSlurpAPI.Model.GroupContactsDto{}} on success
  {:error, info} on failure
  """
  @spec remove_contacts_from_group(Tesla.Env.client, String.t, MailSlurpAPI.Model.UpdateGroupContacts.t, keyword()) :: {:ok, MailSlurpAPI.Model.GroupContactsDto.t} | {:error, Tesla.Env.t}
  def remove_contacts_from_group(connection, group_id, update_group_contacts, _opts \\ []) do
    %{}
    |> method(:delete)
    |> url("/groups/#{group_id}/contacts")
    |> add_param(:body, :body, update_group_contacts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %MailSlurpAPI.Model.GroupContactsDto{}}
    ])
  end
end