Sha256: 2a097d62b51d729a70eda2d9f1676554a47aad52b430cbb6daa75224e49ebfa3

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

module Workarea
  class ReindexRelease
    include Sidekiq::Worker
    include Sidekiq::CallbacksWorker

    sidekiq_options(
      enqueue_on: {
        Release => :save,
        only_if: -> { publish_at_changed? },
        with: -> { [id, publish_at_was, publish_at] }
      },
      queue: 'high'
    )

    def perform(id, previous_publish_at, new_publish_at)
      rescheduled_release = Release.find(id)
      earlier, later = if previous_publish_at.present? && new_publish_at.present?
        [previous_publish_at, new_publish_at].sort
      elsif previous_publish_at.present?
        [previous_publish_at, nil]
      else
        [new_publish_at, nil]
      end

      affected_releases = Release.scheduled(after: earlier, before: later).includes(:changesets).to_a
      affected_releases += [rescheduled_release]
      affected_releases.uniq!

      affected_models = affected_releases.flat_map(&:changesets).flat_map(&:releasable)

      affected_releases.each do |release|
        affected_models.each do |releasable|
          Search::Storefront.new(releasable.in_release(release)).destroy

          # Different models have different indexing workers, running callbacks
          # ensures the appropriate worker is triggered
          releasable.run_callbacks(:save_release_changes)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
workarea-core-3.5.13 app/workers/workarea/reindex_release.rb