# 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