discourse/app/jobs/regular/topic_action_converter.rb
2023-01-09 14:14:59 +00:00

30 lines
872 B
Ruby

# frozen_string_literal: true
class Jobs::TopicActionConverter < ::Jobs::Base
# Re-creating all the user actions could be very slow, so let's do it in a job
# to avoid a N+1 query on a front facing operation.
def execute(args)
topic = Topic.find_by(id: args[:topic_id])
return if topic.blank?
UserAction
.where(
target_topic_id: topic.id,
action_type: [UserAction::GOT_PRIVATE_MESSAGE, UserAction::NEW_PRIVATE_MESSAGE],
)
.find_each do |ua|
UserAction.remove_action!(
ua.attributes.symbolize_keys.slice(
:action_type,
:user_id,
:acting_user_id,
:target_topic_id,
:target_post_id,
),
)
end
topic.posts.find_each { |post| UserActionManager.post_created(post) }
UserActionManager.topic_created(topic)
end
end