lib/auth0/management/jobs.ex

defmodule Auth0.Management.Jobs do
  @moduledoc """
  Documentation for Auth0 Management API of Jobs.

  ## endpoint
  - /api/v2/jobs/{id}
  - /api/v2/jobs/{id}/errors
  - /api/v2/jobs/users-exports
  - /api/v2/jobs/users-imports
  - /api/v2/jobs/verification-email
  """

  alias Auth0.Config
  alias Auth0.Entity
  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 response_body :: String.t()
  @type error :: {:error, integer, term} | {:error, term}

  @endpoint_by_id "/api/v2/jobs/{id}"
  @endpoint_errors "/api/v2/jobs/{id}/errors"
  @endpoint_users_exports "/api/v2/jobs/users-exports"
  @endpoint_users_imports "/api/v2/jobs/users-imports"
  @endpoint_verification_email "/api/v2/jobs/verification-email"

  @doc """
  Get a job.

  ## see
  https://auth0.com/docs/api/management/v2/#!/Jobs/get_jobs_by_id

  """
  @spec get(id, config) :: {:ok, Entity.Jobs.t(), response_body} | error
  def get(id, %Config{} = config) do
    Get.execute(@endpoint_by_id, id, config)
  end

  @doc """
  Get job error details.

  ## see
  https://auth0.com/docs/api/management/v2/#!/Jobs/get_errors

  """
  @spec get_error(id, config) :: {:ok, Entity.JobsErrors.t(), response_body} | error
  def get_error(id, %Config{} = config) do
    Errors.Get.execute(@endpoint_errors, id, config)
  end

  @doc """
  Create export users job.

  ## see
  https://auth0.com/docs/api/management/v2/#!/Jobs/post_users_exports

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

  @doc """
  Create import users job.

  ## see
  https://auth0.com/docs/api/management/v2/#!/Jobs/post_users_imports

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

  @doc """
  Send an email address verification email.

  ## see
  https://auth0.com/docs/api/management/v2/#!/Jobs/post_verification_email

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