lib/baz/collection_asset_imports/jobs/pull_collection_assets.ex

defmodule Baz.CollectionAssetImports.Jobs.PullCollectionAssets do
  @moduledoc """
  Fetch collection assets one page at a time matching the import filters:

  - venue
  - slug
  - token_ids
  """

  use Oban.Worker, queue: :pull, tags: ["baz", "venue_collection_asset"]
  require Logger

  @impl Oban.Worker
  def perform(%Oban.Job{args: %{"collection_asset_import_id" => import_id}}) do
    asset_import = Baz.CollectionAssetImports.get_collection_asset_import!(import_id)

    %{
      collection_asset_import_id: asset_import.id,
      retries: 0,
      page_number: 0,
      page_cursor: nil
    }
    |> Baz.CollectionAssetImports.Jobs.PullCollectionAssetsByPage.new()
    |> Oban.insert()
  rescue
    e ->
      "unhandled error pulling collection assets error=~s, stacktrace=~s"
      |> format_log_error([inspect(e), inspect(__STACKTRACE__)])
  end

  defp format_log_error(format, data) do
    format
    |> :io_lib.format(data)
    |> Logger.error()
  end
end