lib/auth0/management/jobs.ex

defmodule Auth0.Management.Jobs do
  alias Auth0.Config
  alias Auth0.Management.Jobs.Get
  alias Auth0.Management.Jobs.Errors
  alias Auth0.Management.Jobs.UsersExport
  alias Auth0.Management.Jobs.UsersImport
  alias Auth0.Management.Jobs.VerificationEmail

  @type id :: String.t()
  @type config :: Config.t()
  @type error :: {:error, integer, term} | {:error, term}

  @doc """
  Export all users to a file via a long-running job.

  ## see
  https://auth0.com/docs/api/management/v2/jobs/post-users-exports

  """
  @spec create_users_exports(map(), config) ::
          {:ok, map()} | error
  def create_users_exports(%{} = params, %Config{} = config) do
    UsersExport.execute(params, config)
  end

  @doc """
  Import users from a formatted file into a connection via a long-running job.

  ## see
  https://auth0.com/docs/api/management/v2/jobs/post-users-imports

  """
  @spec create_users_imports(map(), config) ::
          {:ok, map()} | error
  def create_users_imports(%{} = params, %Config{} = config) do
    UsersImport.execute(params, config)
  end

  @doc """
  Send an email to the specified user that asks them to click a link to verify their email address.

  ## see
  https://auth0.com/docs/api/management/v2/jobs/post-verification-email

  """
  @spec send_verification_email(map(), config) ::
          {:ok, map()} | error
  def send_verification_email(%{} = params, %Config{} = config) do
    VerificationEmail.execute(params, config)
  end

  @doc """
  Retrieves a job. Useful to check its status.

  ## see
  https://auth0.com/docs/api/management/v2/jobs/get-jobs-by-id

  """
  @spec get(id, config) ::
          {:ok, list(map()) | map()} | error
  def get(id, %Config{} = config) do
    Get.execute(id, config)
  end

  @doc """
  Retrieve error details of a failed job.

  ## see
  https://auth0.com/docs/api/management/v2/jobs/get-errors

  """
  @spec get_error(id, config) ::
          {:ok, list(map()) | map()} | error
  def get_error(id, %Config{} = config) do
    Errors.Get.execute(id, config)
  end
end