FEATURE: 1 year anniversary badge

This commit is contained in:
Régis Hanol 2015-02-18 19:30:07 +01:00
parent 2a4b30346c
commit 0fca0e9758
2 changed files with 30 additions and 0 deletions

View file

@ -19,6 +19,7 @@ class Badge < ActiveRecord::Base
NiceShare = 21
GoodShare = 22
GreatShare = 23
OneYearAnniversary = 24
# other consts
AutobiographerMinBioLength = 10
@ -171,6 +172,23 @@ SQL
(:backfill OR u.id IN (:user_ids) )
SQL
# member for a year + has posted at least once during that year
OneYearAnniversary = <<-SQL
SELECT u.id AS user_id, MIN(u.created_at + interval '1 year') AS granted_at
FROM users u
JOIN posts p ON p.user_id = u.id
WHERE u.id > 0
AND u.active
AND NOT u.blocked
AND u.created_at + interval '1 year' < now()
AND p.deleted_at IS NULL
AND NOT p.hidden
AND p.created_at + interval '1 year' > now()
AND (:backfill OR u.id IN (:user_ids))
GROUP BY u.id
HAVING COUNT(p.id) > 0
SQL
def self.like_badge(count, is_topic)
# we can do better with dates, but its hard work
"

View file

@ -238,6 +238,18 @@ like_badges.each do |spec|
end
end
Badge.seed do |b|
b.id = Badge::OneYearAnniversary
b.default_name = "1 year anniversary"
b.default_icon = "fa-birthday-cake"
b.badge_type_id = BadgeType::Bronze
b.query = Badge::Queries::OneYearAnniversary
b.default_badge_grouping_id = BadgeGrouping::Community
b.trigger = Badge::Trigger::None
b.auto_revoke = false
b.system = true
end
Badge.where("NOT system AND id < 100").each do |badge|
new_id = [Badge.maximum(:id) + 1, 100].max
old_id = badge.id