lib/baz/collection_asset_imports/jobs/pull_collection_assets.ex

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

  - token_ids
  """

  use Oban.Worker, queue: :imports
  require Logger

  @impl Oban.Worker
  def perform(%Oban.Job{args: %{"collection_asset_import_id" => import_id}}) do
    collection_asset_import = Baz.CollectionAssetImports.get_collection_asset_import!(import_id)
    {:ok, _collection_asset_import} = update_import_status(collection_asset_import, "executing")

    %{collection_asset_import_id: import_id, page_number: 0, page_cursor: nil}
    |> Baz.CollectionAssetImports.Jobs.PullCollectionAssetsByPage.new()
    |> Oban.insert()
  rescue
    e ->
      "unhandled error retrieving collection assets error=~s, stacktrace=~s"
      |> :io_lib.format([
        e |> inspect,
        __STACKTRACE__ |> inspect
      ])
      |> Logger.error()
  end

  defp update_import_status(collection_asset_import, status) do
    Baz.CollectionAssetImports.update_collection_asset_import(collection_asset_import, %{
      status: status
    })
  end
end