FIX: remove faulty "ensure consistency" badge job

This commit is contained in:
Sam
2014-08-11 09:21:06 +10:00
parent b8d7fb8735
commit 22cd259687
6 changed files with 55 additions and 35 deletions

View File

@@ -0,0 +1,34 @@
class AddUserBadgeUniqueIndex < ActiveRecord::Migration
def up
# used to keep badges distinct
add_column :user_badges, :seq, :integer, default: 0, null: false
# invent artificial seq for badges
execute "
UPDATE user_badges ub1 SET seq = X.seq
FROM (
SELECT ub.id, rank() OVER (PARTITION BY user_id ORDER BY granted_at) seq
FROM user_badges ub
JOIN badges b ON b.id = ub.badge_id
WHERE b.multiple_grant
) X
WHERE ub1.id = X.id
"
# delete all single award dupes
execute "
DELETE FROM user_badges ub1
WHERE ub1.id NOT IN (
SELECT MIN(ub.id)
FROM user_badges ub
GROUP BY ub.user_id, ub.badge_id, ub.seq
)
"
add_index :user_badges, [:badge_id, :user_id, :seq], unique: true, where: 'post_id IS NULL'
end
def down
remove_column :user_badges, :seq, :integer
end
end