From c1b0d08c59e94277d65467258cae4bded5534436 Mon Sep 17 00:00:00 2001 From: Ben Halpern Date: Mon, 26 Mar 2018 13:14:24 -0400 Subject: [PATCH] Update follow suggestions logic and add taggable to users (#147) --- app/labor/user_follow_suggester.rb | 8 +++++--- app/models/follow.rb | 2 +- app/models/user.rb | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/labor/user_follow_suggester.rb b/app/labor/user_follow_suggester.rb index ccc6bee99..a1b4d0268 100644 --- a/app/labor/user_follow_suggester.rb +++ b/app/labor/user_follow_suggester.rb @@ -18,8 +18,10 @@ class UserFollowSuggester order("comments_count DESC").limit(25).offset(rand(0..offset_number)).to_a group_5 = User.order("reputation_modifier DESC").offset(rand(0..offset_number)).limit(15).to_a group_6 = User.order("comments_count DESC").offset(rand(0..offset_number)).limit(15).to_a - users = (group_1 + group_2 + group_3 + group_4 + group_5 + group_6 - [user]). - uniq.shuffle.first(50) + group_7 = User.tagged_with(user.decorate.cached_followed_tag_names, any: true).limit(15).to_a + + users = ((group_1 + group_2 + group_3 + group_4 + group_5 + group_6 - [user]). + shuffle.first(50) + group_7).uniq else group_1 = User.order("reputation_modifier DESC").offset(rand(0..offset_number)).limit(100).to_a group_2 = User.where("articles_count > ?", 5). @@ -35,7 +37,7 @@ class UserFollowSuggester Article. tagged_with(user.decorate.cached_followed_tag_names, any: true). where(published: true). - where("positive_reactions_count > ?", article).pluck(:user_id). + where("positive_reactions_count > ? AND published_at > ?", article, 7.months.ago).pluck(:user_id). each_with_object(Hash.new(0)) { |value, counts| counts[value] += 1 }. sort_by { |_key, value| value }. map { |arr| arr[0] } diff --git a/app/models/follow.rb b/app/models/follow.rb index 0afc1f376..0847fe5ab 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -65,7 +65,7 @@ class Follow < ApplicationRecord def send_email_notification if followable.class.name == "User" && followable.email.present? && followable.email_follower_notifications return if EmailMessage.where(user_id: followable.id). - where("sent_at > ?", rand(6..35).hours.ago). + where("sent_at > ?", rand(15..35).hours.ago). where("subject LIKE ?", "%followed you on dev.to%").any? NotifyMailer.new_follower_email(self).deliver end diff --git a/app/models/user.rb b/app/models/user.rb index 05abfb3f3..c9a1ee60c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -6,6 +6,8 @@ class User < ApplicationRecord include AlgoliaSearch include Storext.model + acts_as_taggable_on :tags + acts_as_followable acts_as_follower