lib/spatio/api/native_dm.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.NativeDM do
  @moduledoc """
  API calls for all endpoints tagged `NativeDM`.
  """

  alias Spatio.Connection
  import Spatio.RequestBuilder

  @doc """
  Add a reaction to a DM message.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `message_id` (String.t): 
  - `request_body` (%{optional(String.t) => any()}): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec add_native_dm_reaction(Tesla.Env.client, String.t, %{optional(String.t) => any()}, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def add_native_dm_reaction(connection, message_id, request_body, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/native/dm/messages/#{message_id}/reactions")
      |> add_param(:body, :body, request_body)
      |> Enum.into([])

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

  @doc """
  Attach a file to a DM message.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `message_id` (String.t): 
  - `request_body` (%{optional(String.t) => any()}): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec attach_to_native_dm_message(Tesla.Env.client, String.t, %{optional(String.t) => any()}, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def attach_to_native_dm_message(connection, message_id, request_body, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/native/dm/messages/#{message_id}/attachments")
      |> add_param(:body, :body, request_body)
      |> Enum.into([])

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

  @doc """
  Delete a DM message.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Forward a DM message to another conversation.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `message_id` (String.t): 
  - `request_body` (%{optional(String.t) => any()}): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec forward_native_dm_message(Tesla.Env.client, String.t, %{optional(String.t) => any()}, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def forward_native_dm_message(connection, message_id, request_body, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/native/dm/messages/#{message_id}/forward")
      |> add_param(:body, :body, request_body)
      |> Enum.into([])

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

  @doc """
  List the caller's DM channels.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List DM conversations with metadata (last message, unread count, etc.).

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List messages in a DM.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List pinned messages in a DM.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List threaded replies on a message.

  ### Parameters

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

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec list_native_dm_thread_replies(Tesla.Env.client, String.t, String.t, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def list_native_dm_thread_replies(connection, dm_id, message_id, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/native/dm/#{dm_id}/messages/#{message_id}/replies")
      |> Enum.into([])

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

  @doc """
  Mark a DM as read.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Mute a DM.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `dm_id` (String.t): 
  - `opts` (keyword): Optional parameters
    - `:body` (%{optional(String.t) => any()}): 

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec mute_native_dm(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def mute_native_dm(connection, dm_id, opts \\ []) do
    optional_params = %{
      :body => :body
    }

    request =
      %{}
      |> method(:post)
      |> url("/v1/native/dm/#{dm_id}/mute")
      |> add_optional_params(optional_params, opts)
      |> ensure_body()
      |> Enum.into([])

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

  @doc """
  Pin a DM conversation in the sidebar.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Pin a DM message.

  ### Parameters

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

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec pin_native_dm_message(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def pin_native_dm_message(connection, message_id, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/native/dm/messages/#{message_id}/pin")
      |> ensure_body()
      |> Enum.into([])

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

  @doc """
  Post a DM message (top-level entry).

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `request_body` (%{optional(String.t) => any()}): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec post_native_dm_message(Tesla.Env.client, %{optional(String.t) => any()}, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def post_native_dm_message(connection, request_body, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/native/dm")
      |> add_param(:body, :body, request_body)
      |> Enum.into([])

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

  @doc """
  Post a threaded reply.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `dm_id` (String.t): 
  - `message_id` (String.t): 
  - `request_body` (%{optional(String.t) => any()}): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec post_native_dm_thread_reply(Tesla.Env.client, String.t, String.t, %{optional(String.t) => any()}, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def post_native_dm_thread_reply(connection, dm_id, message_id, request_body, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/native/dm/#{dm_id}/messages/#{message_id}/replies")
      |> add_param(:body, :body, request_body)
      |> Enum.into([])

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

  @doc """
  Remove a reaction.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Search DM messages.

  ### Parameters

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

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec search_native_dm_messages(Tesla.Env.client, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def search_native_dm_messages(connection, opts \\ []) do
    optional_params = %{
      :q => :query
    }

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

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

  @doc """
  Save a draft on a DM conversation.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `dm_id` (String.t): 
  - `request_body` (%{optional(String.t) => any()}): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec set_native_dm_draft(Tesla.Env.client, String.t, %{optional(String.t) => any()}, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def set_native_dm_draft(connection, dm_id, request_body, _opts \\ []) do
    request =
      %{}
      |> method(:put)
      |> url("/v1/native/dm/#{dm_id}/draft")
      |> add_param(:body, :body, request_body)
      |> Enum.into([])

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

  @doc """
  Unpin a DM conversation.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Unpin a DM message.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Update a DM message body.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `dm_id` (String.t): 
  - `message_id` (String.t): 
  - `request_body` (%{optional(String.t) => any()}): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec update_native_dm_message(Tesla.Env.client, String.t, String.t, %{optional(String.t) => any()}, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def update_native_dm_message(connection, dm_id, message_id, request_body, _opts \\ []) do
    request =
      %{}
      |> method(:patch)
      |> url("/v1/native/dm/#{dm_id}/messages/#{message_id}")
      |> add_param(:body, :body, request_body)
      |> Enum.into([])

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