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

  alias Spatio.Connection
  import Spatio.RequestBuilder

  @doc """
  Accept a workspace invitation by token. The signed-in user's email must match the invitation. Organization-token accept lives at `POST /v1/organizations/{org}/accept-invitation`. 

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Add a member directly (skips invitation flow).

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Create a workspace. Requires `organizationId` in the body — bare \"personal\" workspaces aren't supported on the public API. 

  ### Parameters

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

  ### Returns

  - `{:ok, Spatio.Model.WorkspaceEnvelope.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec create_workspace(Tesla.Env.client, Spatio.Model.CreateWorkspaceRequest.t, keyword()) :: {:ok, Spatio.Model.WorkspaceEnvelope.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def create_workspace(connection, create_workspace_request, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/workspaces")
      |> add_param(:body, :body, create_workspace_request)
      |> Enum.into([])

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

  @doc """
  Invite a user to a workspace.

  ### Parameters

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

  ### Returns

  - `{:ok, Spatio.Model.WorkspaceInvitation.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec create_workspace_invitation(Tesla.Env.client, String.t, Spatio.Model.CreateWorkspaceInvitationRequest.t, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.WorkspaceInvitation.t} | {:error, Tesla.Env.t}
  def create_workspace_invitation(connection, workspace_id, create_workspace_invitation_request, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/workspaces/#{workspace_id}/invitations")
      |> add_param(:body, :body, create_workspace_invitation_request)
      |> Enum.into([])

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

  @doc """
  Fetch invitation details by token (unauthenticated). Used by the renderer to show invitation context before the user signs in. 

  ### Parameters

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

  ### Returns

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

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.PublicInvitationPayload},
      {404, Spatio.Model.ApiError},
      {410, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Fetch a single workspace by id.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List the caller's workspaces (across organizations).

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List pending workspace invitations.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List members of a workspace.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Remove a member from the workspace.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Revoke a pending workspace invitation.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Update workspace metadata.

  ### Parameters

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

  ### Returns

  - `{:ok, Spatio.Model.WorkspaceEnvelope.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec update_workspace(Tesla.Env.client, String.t, Spatio.Model.UpdateWorkspaceRequest.t, keyword()) :: {:ok, Spatio.Model.WorkspaceEnvelope.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def update_workspace(connection, workspace_id, update_workspace_request, _opts \\ []) do
    request =
      %{}
      |> method(:patch)
      |> url("/v1/workspaces/#{workspace_id}")
      |> add_param(:body, :body, update_workspace_request)
      |> Enum.into([])

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

  @doc """
  Update a member's role.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `workspace_id` (String.t): 
  - `member_id` (String.t): 
  - `update_workspace_member_request` (UpdateWorkspaceMemberRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, %{}}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec update_workspace_member(Tesla.Env.client, String.t, String.t, Spatio.Model.UpdateWorkspaceMemberRequest.t, keyword()) :: {:ok, %{optional(String.t) => any()}} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def update_workspace_member(connection, workspace_id, member_id, update_workspace_member_request, _opts \\ []) do
    request =
      %{}
      |> method(:patch)
      |> url("/v1/workspaces/#{workspace_id}/members/#{member_id}")
      |> add_param(:body, :body, update_workspace_member_request)
      |> Enum.into([])

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