lib/baz/collection_event_imports/jobs/pull_collection_events.ex

defmodule Baz.CollectionEventImports.Jobs.PullCollectionEvents do
  @moduledoc """
  Fetches the collection events, a page at a time matching the import filters:

  - before
  - after
  - token_ids
  - event_types
  """

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

  @impl Oban.Worker
  def perform(%Oban.Job{args: %{"collection_event_import_id" => import_id}}) do
    event_import = Baz.CollectionEventImports.get_collection_event_import!(import_id)

    %{
      collection_event_import_id: event_import.id,
      retries: 0,
      page_number: 0,
      page_cursor: nil
    }
    |> Baz.CollectionEventImports.Jobs.PullCollectionEventsByPage.new()
    |> Oban.insert()
  rescue
    e ->
      "unhandled error pulling collection events 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