lib/vr_chat/api/favorites.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 VRChat.Api.Favorites do
  @moduledoc """
  API calls for all endpoints tagged `Favorites`.
  """

  alias VRChat.Connection
  import VRChat.RequestBuilder


  @doc """
  Add Favorite
  Add a new favorite.  Friend groups are named `group_0` through `group_3`. Avatar and World groups are named `avatars1` to `avatars4` and `worlds1` to `worlds4`.  You cannot add people whom you are not friends with to your friends list. Destroying a friendship removes the person as favorite on both sides.

  ## Parameters

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

  {:ok, VRChat.Model.Favorite.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec add_favorite(Tesla.Env.client, keyword()) :: {:ok, VRChat.Model.Error.t} | {:ok, VRChat.Model.Favorite.t} | {:error, Tesla.Env.t}
  def add_favorite(connection, opts \\ []) do
    optional_params = %{
      :body => :body
    }
    %{}
    |> method(:post)
    |> url("/favorites")
    |> add_optional_params(optional_params, opts)
    |> ensure_body()
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %VRChat.Model.Favorite{}},
      { 400, %VRChat.Model.Error{}},
      { 403, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  Clear Favorite Group
  Clear ALL contents of a specific favorite group.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - favorite_group_type (String.t): The type of group to fetch, must be a valid FavoriteType.
  - favorite_group_name (String.t): 
  - user_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, VRChat.Model.Success.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec clear_favorite_group(Tesla.Env.client, String.t, String.t, String.t, keyword()) :: {:ok, VRChat.Model.Success.t} | {:error, Tesla.Env.t}
  def clear_favorite_group(connection, favorite_group_type, favorite_group_name, user_id, _opts \\ []) do
    %{}
    |> method(:delete)
    |> url("/favorite/group/#{favorite_group_type}/#{favorite_group_name}/#{user_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %VRChat.Model.Success{}}
    ])
  end

  @doc """
  Show Favorite
  Return information about a specific Favorite.

  ## Parameters

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

  {:ok, VRChat.Model.Favorite.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec get_favorite(Tesla.Env.client, String.t, keyword()) :: {:ok, VRChat.Model.Error.t} | {:ok, VRChat.Model.Favorite.t} | {:error, Tesla.Env.t}
  def get_favorite(connection, favorite_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/favorites/#{favorite_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %VRChat.Model.Favorite{}},
      { 401, %VRChat.Model.Error{}},
      { 404, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  Show Favorite Group
  Fetch information about a specific favorite group.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - favorite_group_type (String.t): The type of group to fetch, must be a valid FavoriteType.
  - favorite_group_name (String.t): 
  - user_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, VRChat.Model.FavoriteGroup.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec get_favorite_group(Tesla.Env.client, String.t, String.t, String.t, keyword()) :: {:ok, VRChat.Model.FavoriteGroup.t} | {:error, Tesla.Env.t}
  def get_favorite_group(connection, favorite_group_type, favorite_group_name, user_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/favorite/group/#{favorite_group_type}/#{favorite_group_name}/#{user_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %VRChat.Model.FavoriteGroup{}}
    ])
  end

  @doc """
  List Favorite Groups
  Return a list of favorite groups owned by a user. Returns the same information as `getFavoriteGroups`.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :n (integer()): The number of objects to return.
    - :offset (integer()): A zero-based offset from the default object sorting from where search results start.
    - :owner_id (String.t): The owner of whoms favorite groups to return. Must be a UserID.
  ## Returns

  {:ok, [%FavoriteGroup{}, ...]} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec get_favorite_groups(Tesla.Env.client, keyword()) :: {:ok, list(VRChat.Model.FavoriteGroup.t)} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def get_favorite_groups(connection, opts \\ []) do
    optional_params = %{
      :n => :query,
      :offset => :query,
      :ownerId => :query
    }
    %{}
    |> method(:get)
    |> url("/favorite/groups")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, [%VRChat.Model.FavoriteGroup{}]},
      { 401, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  List Favorites
  Returns a list of favorites.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :n (integer()): The number of objects to return.
    - :offset (integer()): A zero-based offset from the default object sorting from where search results start.
    - :type (String.t): The type of favorites to return, FavoriteType.
    - :tag (String.t): Tags to include (comma-separated). Any of the tags needs to be present.
  ## Returns

  {:ok, [%Favorite{}, ...]} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec get_favorites(Tesla.Env.client, keyword()) :: {:ok, list(VRChat.Model.Favorite.t)} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def get_favorites(connection, opts \\ []) do
    optional_params = %{
      :n => :query,
      :offset => :query,
      :type => :query,
      :tag => :query
    }
    %{}
    |> method(:get)
    |> url("/favorites")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, [%VRChat.Model.Favorite{}]},
      { 401, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  Remove Favorite
  Remove a favorite from your favorites list.

  ## Parameters

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

  {:ok, VRChat.Model.Success.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec remove_favorite(Tesla.Env.client, String.t, keyword()) :: {:ok, VRChat.Model.Success.t} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def remove_favorite(connection, favorite_id, _opts \\ []) do
    %{}
    |> method(:delete)
    |> url("/favorites/#{favorite_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %VRChat.Model.Success{}},
      { 401, %VRChat.Model.Error{}},
      { 404, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  Update Favorite Group
  Update information about a specific favorite group.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - favorite_group_type (String.t): The type of group to fetch, must be a valid FavoriteType.
  - favorite_group_name (String.t): 
  - user_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :body (UpdateFavoriteGroupRequest): 
  ## Returns

  {:ok, nil} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec update_favorite_group(Tesla.Env.client, String.t, String.t, String.t, keyword()) :: {:ok, nil} | {:error, Tesla.Env.t}
  def update_favorite_group(connection, favorite_group_type, favorite_group_name, user_id, opts \\ []) do
    optional_params = %{
      :body => :body
    }
    %{}
    |> method(:put)
    |> url("/favorite/group/#{favorite_group_type}/#{favorite_group_name}/#{user_id}")
    |> add_optional_params(optional_params, opts)
    |> ensure_body()
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, false}
    ])
  end
end