diff --git a/app/models/badge.rb b/app/models/badge.rb index e040d761be8..41a2d7922af 100644 --- a/app/models/badge.rb +++ b/app/models/badge.rb @@ -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 " diff --git a/db/fixtures/006_badges.rb b/db/fixtures/006_badges.rb index 08c61684d57..a7c726e484e 100644 --- a/db/fixtures/006_badges.rb +++ b/db/fixtures/006_badges.rb @@ -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