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

  alias VRChat.Connection
  import VRChat.RequestBuilder


  @doc """
  Create World
  Create a new world. This endpoint requires `assetUrl` to be a valid File object with `.vrcw` file extension, and `imageUrl` to be a valid File object with an image file extension.

  ## Parameters

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

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

  @doc """
  Delete World
  Delete a world. Notice a world is never fully \"deleted\", only its ReleaseStatus is set to \"hidden\" and the linked Files are deleted. The WorldID is permanently reserved.

  ## Parameters

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

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

  @doc """
  List Active Worlds
  Search and list currently Active worlds by query filters.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :featured (boolean()): Filters on featured results.
    - :sort (String.t): 
    - :n (integer()): The number of objects to return.
    - :order (String.t): 
    - :offset (integer()): A zero-based offset from the default object sorting from where search results start.
    - :search (String.t): Filters by world name.
    - :tag (String.t): Tags to include (comma-separated). Any of the tags needs to be present.
    - :notag (String.t): Tags to exclude (comma-separated).
    - :release_status (String.t): Filter by ReleaseStatus.
    - :max_unity_version (String.t): The maximum Unity version supported by the asset.
    - :min_unity_version (String.t): The minimum Unity version supported by the asset.
    - :platform (String.t): The platform the asset supports.
  ## Returns

  {:ok, [%LimitedWorld{}, ...]} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec get_active_worlds(Tesla.Env.client, keyword()) :: {:ok, list(VRChat.Model.LimitedWorld.t)} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def get_active_worlds(connection, opts \\ []) do
    optional_params = %{
      :featured => :query,
      :sort => :query,
      :n => :query,
      :order => :query,
      :offset => :query,
      :search => :query,
      :tag => :query,
      :notag => :query,
      :releaseStatus => :query,
      :maxUnityVersion => :query,
      :minUnityVersion => :query,
      :platform => :query
    }
    %{}
    |> method(:get)
    |> url("/worlds/active")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, [%VRChat.Model.LimitedWorld{}]},
      { 401, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  List Favorited Worlds
  Search and list favorited worlds by query filters.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :featured (boolean()): Filters on featured results.
    - :sort (String.t): 
    - :n (integer()): The number of objects to return.
    - :order (String.t): 
    - :offset (integer()): A zero-based offset from the default object sorting from where search results start.
    - :search (String.t): Filters by world name.
    - :tag (String.t): Tags to include (comma-separated). Any of the tags needs to be present.
    - :notag (String.t): Tags to exclude (comma-separated).
    - :release_status (String.t): Filter by ReleaseStatus.
    - :max_unity_version (String.t): The maximum Unity version supported by the asset.
    - :min_unity_version (String.t): The minimum Unity version supported by the asset.
    - :platform (String.t): The platform the asset supports.
    - :user_id (String.t): Target user to see information on, admin-only.
  ## Returns

  {:ok, [%LimitedWorld{}, ...]} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec get_favorited_worlds(Tesla.Env.client, keyword()) :: {:ok, list(VRChat.Model.LimitedWorld.t)} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def get_favorited_worlds(connection, opts \\ []) do
    optional_params = %{
      :featured => :query,
      :sort => :query,
      :n => :query,
      :order => :query,
      :offset => :query,
      :search => :query,
      :tag => :query,
      :notag => :query,
      :releaseStatus => :query,
      :maxUnityVersion => :query,
      :minUnityVersion => :query,
      :platform => :query,
      :userId => :query
    }
    %{}
    |> method(:get)
    |> url("/worlds/favorites")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, [%VRChat.Model.LimitedWorld{}]},
      { 401, %VRChat.Model.Error{}},
      { 403, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  List Recent Worlds
  Search and list recently visited worlds by query filters.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :featured (boolean()): Filters on featured results.
    - :sort (String.t): 
    - :n (integer()): The number of objects to return.
    - :order (String.t): 
    - :offset (integer()): A zero-based offset from the default object sorting from where search results start.
    - :search (String.t): Filters by world name.
    - :tag (String.t): Tags to include (comma-separated). Any of the tags needs to be present.
    - :notag (String.t): Tags to exclude (comma-separated).
    - :release_status (String.t): Filter by ReleaseStatus.
    - :max_unity_version (String.t): The maximum Unity version supported by the asset.
    - :min_unity_version (String.t): The minimum Unity version supported by the asset.
    - :platform (String.t): The platform the asset supports.
    - :user_id (String.t): Target user to see information on, admin-only.
  ## Returns

  {:ok, [%LimitedWorld{}, ...]} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec get_recent_worlds(Tesla.Env.client, keyword()) :: {:ok, list(VRChat.Model.LimitedWorld.t)} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def get_recent_worlds(connection, opts \\ []) do
    optional_params = %{
      :featured => :query,
      :sort => :query,
      :n => :query,
      :order => :query,
      :offset => :query,
      :search => :query,
      :tag => :query,
      :notag => :query,
      :releaseStatus => :query,
      :maxUnityVersion => :query,
      :minUnityVersion => :query,
      :platform => :query,
      :userId => :query
    }
    %{}
    |> method(:get)
    |> url("/worlds/recent")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, [%VRChat.Model.LimitedWorld{}]},
      { 401, %VRChat.Model.Error{}},
      { 403, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  Get World by ID
  Get information about a specific World.

  ## Parameters

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

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

  @doc """
  Get World Instance
  Returns a worlds instance.

  ## Parameters

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

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

  @doc """
  Get World Metadata
  Return a worlds custom metadata. This is currently believed to be unused. Metadata can be set with `updateWorld` and can be any arbitrary object.

  ## Parameters

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

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

  @doc """
  Get World Publish Status
  Returns a worlds publish status.

  ## Parameters

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

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

  @doc """
  Publish World
  Publish a world. You can only publish one world per week.

  ## Parameters

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

  {:ok, nil} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec publish_world(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def publish_world(connection, world_id, _opts \\ []) do
    %{}
    |> method(:put)
    |> url("/worlds/#{world_id}/publish")
    |> ensure_body()
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, false},
      { 401, %VRChat.Model.Error{}},
      { 404, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  Search All Worlds
  Search and list any worlds by query filters.

  ## Parameters

  - connection (VRChat.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :featured (boolean()): Filters on featured results.
    - :sort (String.t): 
    - :user (String.t): Set to `me` for searching own worlds.
    - :user_id (String.t): Filter by UserID.
    - :n (integer()): The number of objects to return.
    - :order (String.t): 
    - :offset (integer()): A zero-based offset from the default object sorting from where search results start.
    - :search (String.t): Filters by world name.
    - :tag (String.t): Tags to include (comma-separated). Any of the tags needs to be present.
    - :notag (String.t): Tags to exclude (comma-separated).
    - :release_status (String.t): Filter by ReleaseStatus.
    - :max_unity_version (String.t): The maximum Unity version supported by the asset.
    - :min_unity_version (String.t): The minimum Unity version supported by the asset.
    - :platform (String.t): The platform the asset supports.
  ## Returns

  {:ok, [%LimitedWorld{}, ...]} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec search_worlds(Tesla.Env.client, keyword()) :: {:ok, list(VRChat.Model.LimitedWorld.t)} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def search_worlds(connection, opts \\ []) do
    optional_params = %{
      :featured => :query,
      :sort => :query,
      :user => :query,
      :userId => :query,
      :n => :query,
      :order => :query,
      :offset => :query,
      :search => :query,
      :tag => :query,
      :notag => :query,
      :releaseStatus => :query,
      :maxUnityVersion => :query,
      :minUnityVersion => :query,
      :platform => :query
    }
    %{}
    |> method(:get)
    |> url("/worlds")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, [%VRChat.Model.LimitedWorld{}]},
      { 401, %VRChat.Model.Error{}}
    ])
  end

  @doc """
  Unpublish World
  Unpublish a world.

  ## Parameters

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

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

  @doc """
  Update World
  Update information about a specific World.

  ## Parameters

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

  {:ok, VRChat.Model.World.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec update_world(Tesla.Env.client, String.t, keyword()) :: {:ok, VRChat.Model.World.t} | {:ok, VRChat.Model.Error.t} | {:error, Tesla.Env.t}
  def update_world(connection, world_id, opts \\ []) do
    optional_params = %{
      :body => :body
    }
    %{}
    |> method(:put)
    |> url("/worlds/#{world_id}")
    |> add_optional_params(optional_params, opts)
    |> ensure_body()
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      { 200, %VRChat.Model.World{}},
      { 401, %VRChat.Model.Error{}},
      { 404, %VRChat.Model.Error{}}
    ])
  end
end