Add one off job to grant the emoji badge retroactively

This commit is contained in:
Robin Ward 2016-04-07 13:49:44 -04:00
parent 5059ee04b9
commit 526573074c
4 changed files with 34 additions and 1 deletions

View File

@ -262,5 +262,6 @@ module Jobs
end
end
Dir["#{Rails.root}/app/jobs/onceoff/*.rb"].each {|file| require_dependency file }
Dir["#{Rails.root}/app/jobs/regular/*.rb"].each {|file| require_dependency file }
Dir["#{Rails.root}/app/jobs/scheduled/*.rb"].each {|file| require_dependency file }

View File

@ -0,0 +1,27 @@
module Jobs
class GrantEmoji < Jobs::Base
sidekiq_options retry: false
def execute(args)
to_award = {}
Post.secured(Guardian.new).visible.public_posts.find_in_batches(batch_size: 5000) do |group|
group.each do |p|
doc = Nokogiri::HTML::fragment(p.cooked)
if (doc.css("img.emoji") - doc.css(".quote img")).size > 0
to_award[p.user_id] ||= { post_id: p.id, created_at: p.created_at }
end
end
end
badge = Badge.find(Badge::FirstEmoji)
to_award.each do |user_id, opts|
BadgeGranter.grant(badge, User.find(user_id), opts)
end
end
end
end

View File

@ -32,7 +32,7 @@ class BadgeGranter
user_badge = UserBadge.create!(badge: @badge,
user: @user,
granted_by: @granted_by,
granted_at: Time.now,
granted_at: @opts[:created_at] || Time.now,
post_id: @post_id,
seq: seq)

View File

@ -0,0 +1,5 @@
class ScheduleEmojiGrant < ActiveRecord::Migration
def up
Jobs.enqueue(:grant_emoji)
end
end