From f5bef3980a4e40a0148fbf32071a96bd22116f3a Mon Sep 17 00:00:00 2001 From: Dessalines Date: Sun, 6 Dec 2020 16:44:36 -0500 Subject: [PATCH] Adding hot rank function, possibly fixing views. --- lemmy_db/src/lib.rs | 8 ++++++++ lemmy_db/src/views/community_view.rs | 5 +++-- .../2020-12-03-035643_create_user_aggregates/up.sql | 8 ++++---- .../2020-12-04-183345_create_community_aggregates/up.sql | 4 ++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lemmy_db/src/lib.rs b/lemmy_db/src/lib.rs index 9fb43d6e4..b5348a6ca 100644 --- a/lemmy_db/src/lib.rs +++ b/lemmy_db/src/lib.rs @@ -217,6 +217,14 @@ lazy_static! { Regex::new(r"^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$").unwrap(); } +pub(crate) mod functions { + use diesel::sql_types::*; + + sql_function! { + fn hot_rank(score: BigInt, time: Timestamp) -> Integer; + } +} + #[cfg(test)] mod tests { use super::fuzzy_search; diff --git a/lemmy_db/src/views/community_view.rs b/lemmy_db/src/views/community_view.rs index 2ab351f40..cbb90a427 100644 --- a/lemmy_db/src/views/community_view.rs +++ b/lemmy_db/src/views/community_view.rs @@ -2,6 +2,7 @@ use crate::{ aggregates::community_aggregates::CommunityAggregates, category::Category, community::{Community, CommunityFollower, CommunitySafe}, + functions::hot_rank, fuzzy_search, limit_and_offset, schema::{category, community, community_aggregates, community_follower, user_}, @@ -253,8 +254,8 @@ impl<'a> CommunityQueryBuilder<'a> { // Covers all other sorts, including hot _ => { query = query - // TODO do custom sql function for hot_rank - // .order_by(hot_rank.desc()) + // TODO do custom sql function for hot_rank, make sure this works + .order_by(hot_rank(community_aggregates::subscribers, community::published).desc()) .then_order_by(community_aggregates::subscribers.desc()) } }; diff --git a/migrations/2020-12-03-035643_create_user_aggregates/up.sql b/migrations/2020-12-03-035643_create_user_aggregates/up.sql index 8d46fbfbe..bc7e6394d 100644 --- a/migrations/2020-12-03-035643_create_user_aggregates/up.sql +++ b/migrations/2020-12-03-035643_create_user_aggregates/up.sql @@ -42,10 +42,10 @@ as $$ begin IF (TG_OP = 'INSERT') THEN update user_aggregates - set post_count = post_count + 1 where user_id = NEW.user_id; + set post_count = post_count + 1 where user_id = NEW.creator_id; ELSIF (TG_OP = 'DELETE') THEN update user_aggregates - set post_count = post_count - 1 where user_id = OLD.user_id; + set post_count = post_count - 1 where user_id = OLD.creator_id; END IF; return null; end $$; @@ -86,10 +86,10 @@ as $$ begin IF (TG_OP = 'INSERT') THEN update user_aggregates - set comment_count = comment_count + 1 where user_id = NEW.user_id; + set comment_count = comment_count + 1 where user_id = NEW.creator_id; ELSIF (TG_OP = 'DELETE') THEN update user_aggregates - set comment_count = comment_count - 1 where user_id = OLD.user_id; + set comment_count = comment_count - 1 where user_id = OLD.creator_id; END IF; return null; end $$; diff --git a/migrations/2020-12-04-183345_create_community_aggregates/up.sql b/migrations/2020-12-04-183345_create_community_aggregates/up.sql index 8af015975..ec9518191 100644 --- a/migrations/2020-12-04-183345_create_community_aggregates/up.sql +++ b/migrations/2020-12-04-183345_create_community_aggregates/up.sql @@ -59,10 +59,10 @@ as $$ begin IF (TG_OP = 'INSERT') THEN update community_aggregates - set comments = comments + 1 where community_id = NEW.community_id; + set comments = comments + 1 from comment c join post p on p.id = c.post_id and p.id = NEW.post_id; ELSIF (TG_OP = 'DELETE') THEN update community_aggregates - set comments = comments - 1 where community_id = OLD.community_id; + set comments = comments - 1 from comment c join post p on p.id = c.post_id and p.id = OLD.post_id; END IF; return null; end $$;