lib/chat_kitty/api/users.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 ChatKitty.Api.Users do
  @moduledoc """
  API calls for all endpoints tagged `Users`.
  """

  alias ChatKitty.Connection
  import ChatKitty.RequestBuilder


  @doc """
  Check a user exists
  Checks if a user exists

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - name (String.t): Username of the user
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec check_user_exists(Tesla.Env.client, String.t, keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, Map.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def check_user_exists(connection, name, _opts \\ []) do
    %{}
    |> method(:head)
    |> url("/v1/users")
    |> add_param(:query, :"name", name)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %{}}
    ])
  end

  @doc """
  Create a user
  Creates a new user

  ## Parameters

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

  {:ok, ChatKitty.Model.ChatUserResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec create_user(Tesla.Env.client, ChatKitty.Model.CreatePersonChatUserResource.t, keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.ChatUserResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def create_user(connection, create_person_chat_user_resource, _opts \\ []) do
    %{}
    |> method(:post)
    |> url("/v1/users")
    |> add_param(:body, :body, create_person_chat_user_resource)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.ChatUserResource{}}
    ])
  end

  @doc """
  Delete a user
  Delets a user

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ChatKitty.Model.ApplicationResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec delete_user(Tesla.Env.client, integer(), keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.ApplicationResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def delete_user(connection, id, _opts \\ []) do
    %{}
    |> method(:delete)
    |> url("/v1/users/#{id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.ApplicationResource{}}
    ])
  end

  @doc """
  List a user's channels
  Returns a page of channels for this user created or joined

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - opts (KeywordList): [optional] Optional parameters
    - :page (integer()): Zero-based page index (0..N)
    - :size (integer()): The size of the page to be returned
    - :sort ([String.t]): Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.
  ## Returns

  {:ok, ChatKitty.Model.PagedModelChannelResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec list_user_channels(Tesla.Env.client, integer(), keyword()) :: {:ok, ChatKitty.Model.PagedModelChannelResource.t} | {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def list_user_channels(connection, id, opts \\ []) do
    optional_params = %{
      :"page" => :query,
      :"size" => :query,
      :"sort" => :query
    }
    %{}
    |> method(:get)
    |> url("/v1/users/#{id}/channels")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.PagedModelChannelResource{}}
    ])
  end

  @doc """
  List a user's messages
  Returns a page of messages sent by this user

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - opts (KeywordList): [optional] Optional parameters
    - :size (integer()): The size of the page to be returned
    - :start (integer()): Start cursor value. Do not set manually. Provided by the Platform API pagination engine to fetch previous or next pages
    - :next (integer()): Next page cursor value. Do not set manually. Provided by the Platform API pagination engine to fetch subsequent pages
    - :relation (String.t): Page cursor relation. Do not set manually. Provided by the Platform API pagination engine to fetch previous or next pages
    - :unread (boolean()): Filters by returning unread messages
  ## Returns

  {:ok, ChatKitty.Model.CursorPagedModelMessageResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec list_user_messages(Tesla.Env.client, integer(), keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.CursorPagedModelMessageResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def list_user_messages(connection, id, opts \\ []) do
    optional_params = %{
      :"size" => :query,
      :"start" => :query,
      :"next" => :query,
      :"relation" => :query,
      :"unread" => :query
    }
    %{}
    |> method(:get)
    |> url("/v1/users/#{id}/messages")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.CursorPagedModelMessageResource{}}
    ])
  end

  @doc """
  List a user's notifications
  Returns a page of notifications received by this user

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - opts (KeywordList): [optional] Optional parameters
    - :size (integer()): The size of the page to be returned
    - :start (integer()): Start cursor value. Do not set manually. Provided by the Platform API pagination engine to fetch previous or next pages
    - :next (integer()): Next page cursor value. Do not set manually. Provided by the Platform API pagination engine to fetch subsequent pages
    - :relation (String.t): Page cursor relation. Do not set manually. Provided by the Platform API pagination engine to fetch previous or next pages
  ## Returns

  {:ok, ChatKitty.Model.CursorPagedModelNotificationResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec list_user_notifications(Tesla.Env.client, integer(), keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:ok, ChatKitty.Model.CursorPagedModelNotificationResource.t} | {:error, Tesla.Env.t}
  def list_user_notifications(connection, id, opts \\ []) do
    optional_params = %{
      :"size" => :query,
      :"start" => :query,
      :"next" => :query,
      :"relation" => :query
    }
    %{}
    |> method(:get)
    |> url("/v1/users/#{id}/notifications")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.CursorPagedModelNotificationResource{}}
    ])
  end

  @doc """
  List users
  Returns a page of users belonging to this application

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :page (integer()): Zero-based page index (0..N)
    - :size (integer()): The size of the page to be returned
    - :sort ([String.t]): Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.
    - :name (String.t): Filters by username
  ## Returns

  {:ok, ChatKitty.Model.PagedModelChatUserResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec list_users(Tesla.Env.client, keyword()) :: {:ok, ChatKitty.Model.PagedModelChatUserResource.t} | {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def list_users(connection, opts \\ []) do
    optional_params = %{
      :"page" => :query,
      :"size" => :query,
      :"sort" => :query,
      :"name" => :query
    }
    %{}
    |> method(:get)
    |> url("/v1/users")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.PagedModelChatUserResource{}}
    ])
  end

  @doc """
  Remove a user secret
  Removes a user secret's value

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - name (String.t): The secret's name
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ChatKitty.Model.ChatUserResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec remove_user_secret(Tesla.Env.client, integer(), String.t, keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.ChatUserResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def remove_user_secret(connection, id, name, _opts \\ []) do
    %{}
    |> method(:delete)
    |> url("/v1/users/#{id}/secrets/#{name}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.ChatUserResource{}}
    ])
  end

  @doc """
  Retrieve a user
  Returns a user by ID

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ChatKitty.Model.ChatUserResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec retrieve_user(Tesla.Env.client, integer(), keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.ChatUserResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def retrieve_user(connection, id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/v1/users/#{id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.ChatUserResource{}}
    ])
  end

  @doc """
  Retrieve a user secret
  Returns a user secret

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - name (String.t): The secret's name
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ChatKitty.Model.SecretResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec retrieve_user_secret(Tesla.Env.client, integer(), String.t, keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.SecretResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def retrieve_user_secret(connection, id, name, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/v1/users/#{id}/secrets/#{name}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.SecretResource{}}
    ])
  end

  @doc """
  Set a user secret
  Sets a user secret's value

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - name (String.t): The secret's name
  - secret_resource (SecretResource): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ChatKitty.Model.ChatUserResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec set_user_secret(Tesla.Env.client, integer(), String.t, ChatKitty.Model.SecretResource.t, keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.ChatUserResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def set_user_secret(connection, id, name, secret_resource, _opts \\ []) do
    %{}
    |> method(:put)
    |> url("/v1/users/#{id}/secrets/#{name}")
    |> add_param(:body, :body, secret_resource)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.ChatUserResource{}}
    ])
  end

  @doc """
  Update a user
  Updates a user

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - opts (KeywordList): [optional] Optional parameters
    - :body (ChatUserPropertiesPatch): 
  ## Returns

  {:ok, ChatKitty.Model.ChatUserResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec update_user(Tesla.Env.client, integer(), keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.ChatUserResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def update_user(connection, id, opts \\ []) do
    optional_params = %{
      :body => :body
    }
    %{}
    |> method(:patch)
    |> url("/v1/users/#{id}")
    |> add_optional_params(optional_params, opts)
    |> ensure_body()
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.ChatUserResource{}}
    ])
  end

  @doc """
  Update a user's display picture
  Updates a user's display picture

  ## Parameters

  - connection (ChatKitty.Connection): Connection to server
  - id (integer()): User ID
  - create_external_file_properties (CreateExternalFileProperties): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ChatKitty.Model.ChatUserResource.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec update_user_display_picture(Tesla.Env.client, integer(), ChatKitty.Model.CreateExternalFileProperties.t, keyword()) :: {:ok, ChatKitty.Model.ApiError.t} | {:ok, ChatKitty.Model.ChatUserResource.t} | {:ok, ChatKitty.Model.AuthenticationError.t} | {:error, Tesla.Env.t}
  def update_user_display_picture(connection, id, create_external_file_properties, _opts \\ []) do
    %{}
    |> method(:post)
    |> url("/v1/users/#{id}/display-picture")
    |> add_param(:body, :body, create_external_file_properties)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 403, %ChatKitty.Model.AuthenticationError{}},
      { 400, %ChatKitty.Model.ApiError{}},
      { 401, %ChatKitty.Model.AuthenticationError{}},
      { 404, %ChatKitty.Model.ApiError{}},
      { 200, %ChatKitty.Model.ChatUserResource{}}
    ])
  end
end