Class: Jobs::NotifyReviewable
- Defined in:
- app/jobs/regular/notify_reviewable.rb
Instance Method Summary collapse
Methods inherited from Base
acquire_cluster_concurrency_lock!, clear_cluster_concurrency_lock!, cluster_concurrency, cluster_concurrency_redis_key, delayed_perform, #error_context, get_cluster_concurrency, #last_db_duration, #log, #perform, #perform_immediately
Instance Method Details
#execute(args) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'app/jobs/regular/notify_reviewable.rb', line 8 def execute(args) return unless reviewable = Reviewable.find_by(id: args[:reviewable_id]) @contacted = Set.new all_updates = Hash.new { |h, k| h[k] = {} } if args[:updated_reviewable_ids].present? Reviewable .where(id: args[:updated_reviewable_ids]) .each do |r| payload = { last_performing_username: args[:performing_username], status: r.status } all_updates[:admins][r.id] = payload all_updates[:moderators][r.id] = payload if r.reviewable_by_moderator? if SiteSetting.enable_category_group_moderation? && r.category.present? r .category . .pluck(:id) .each { |group_id| all_updates[group_id][r.id] = payload } end end end DistributedMutex.synchronize("notify_reviewable_job", validity: 120) do notify_users(User.real.admins, all_updates[:admins]) if reviewable.reviewable_by_moderator? notify_users( User.real.moderators.where("id NOT IN (?)", @contacted), all_updates[:moderators], ) end if SiteSetting.enable_category_group_moderation? && reviewable.category.present? users = User .includes(:group_users) .joins(:group_users) .joins( "INNER JOIN category_moderation_groups ON category_moderation_groups.group_id = group_users.group_id", ) .where("category_moderation_groups.category_id": reviewable.category.id) .where("users.id NOT IN (?)", @contacted) .distinct users.find_each do |user| updates = {} user.group_users.each { |gu| updates.merge!(all_updates[gu.group_id]) } notify_user(user, updates) end @contacted += users.pluck(:id) end end end |