docbrown/app/workers/reactions/bust_reactable_cache_worker.rb
Ben Halpern df4568d275
Bust article on initial reactions to fix cached HTML issue (#19149)
* Bust article on initial reactions to fix cached HTML issue

* Fix whitespace issue

* Move cache-busting logic to worker

* Update app/workers/reactions/bust_reactable_cache_worker.rb

Co-authored-by: Joshua Wehner <joshua@forem.com>

---------

Co-authored-by: Joshua Wehner <joshua@forem.com>
2023-02-20 16:31:38 -05:00

31 lines
1 KiB
Ruby

module Reactions
class BustReactableCacheWorker
include Sidekiq::Job
sidekiq_options queue: :high_priority, retry: 10
def perform(reaction_id)
reaction = Reaction.find_by(id: reaction_id)
return unless reaction&.reactable
cache_bust = EdgeCache::Bust.new
cache_bust.call(reaction.user.path)
case reaction.reactable_type
when "Article"
cache_bust.call("/reactions?article_id=#{reaction.reactable_id}")
article = reaction.reactable
# We only want to bust on the creation or deletion of the "first" reaction.
# This is logically called *after* creation, but *before* deletion. So "1" is correct in each case.
if Reaction.for_articles([reaction.reactable_id]).public_category.size == 1
EdgeCache::BustArticle.call(article)
end
when "Comment"
path = "/reactions?commentable_id=#{reaction.reactable.commentable_id}&" \
"commentable_type=#{reaction.reactable.commentable_type}"
cache_bust.call(path)
end
end
end
end