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

  alias Spatio.Connection
  import Spatio.RequestBuilder

  @doc """
  Disconnect a connected account.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Begin an OAuth install for a connection.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List the caller's multi-provider accounts.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List supported integrations + their connection state. Legacy path; `/v1/connections/list` is the preferred alias. 

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List supported integrations + their connection state.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  List the caller's connected accounts.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Force a refresh of a connection's OAuth tokens.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Remove an account.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Resolve an account by provider/identifier.

  ### Parameters

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

  ### Returns

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

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

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

  @doc """
  Force a sync against the upstream provider.

  ### Parameters

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

  ### Returns

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

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

  @doc """
  Update account metadata (label, etc.).

  ### Parameters

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

  ### Returns

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

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