Calculate initial hot_rank and hot_rank_active for posts and comments from other instances (#3131)
* Calculate initial hot_rank when receiving posts and comments from other instances * Move hot rank update logic into db_schema
This commit is contained in:
parent
d97ff65fe1
commit
e23621c2cd
4 changed files with 40 additions and 2 deletions
|
@ -30,6 +30,7 @@ use lemmy_api_common::{
|
|||
utils::{check_post_deleted_or_removed, is_mod_or_admin},
|
||||
};
|
||||
use lemmy_db_schema::{
|
||||
aggregates::structs::CommentAggregates,
|
||||
newtypes::PersonId,
|
||||
source::{
|
||||
comment::{Comment, CommentLike, CommentLikeForm},
|
||||
|
@ -191,6 +192,9 @@ impl ActivityHandler for CreateOrUpdateNote {
|
|||
};
|
||||
CommentLike::like(context.pool(), &like_form).await?;
|
||||
|
||||
// Calculate initial hot_rank
|
||||
CommentAggregates::update_hot_rank(context.pool(), comment.id).await?;
|
||||
|
||||
let do_send_email = self.kind == CreateOrUpdateType::Create;
|
||||
let post_id = comment.post_id;
|
||||
let post = Post::read(context.pool(), post_id).await?;
|
||||
|
|
|
@ -27,6 +27,7 @@ use lemmy_api_common::{
|
|||
post::{CreatePost, EditPost, PostResponse},
|
||||
};
|
||||
use lemmy_db_schema::{
|
||||
aggregates::structs::PostAggregates,
|
||||
newtypes::PersonId,
|
||||
source::{
|
||||
community::Community,
|
||||
|
@ -187,6 +188,10 @@ impl ActivityHandler for CreateOrUpdatePage {
|
|||
score: 1,
|
||||
};
|
||||
PostLike::like(context.pool(), &like_form).await?;
|
||||
|
||||
// Calculate initial hot_rank for post
|
||||
PostAggregates::update_hot_rank(context.pool(), post.id).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ use crate::{
|
|||
aggregates::structs::CommentAggregates,
|
||||
newtypes::CommentId,
|
||||
schema::comment_aggregates,
|
||||
utils::{get_conn, DbPool},
|
||||
utils::{functions::hot_rank, get_conn, DbPool},
|
||||
};
|
||||
use diesel::{result::Error, ExpressionMethods, QueryDsl};
|
||||
use diesel_async::RunQueryDsl;
|
||||
|
@ -15,6 +15,19 @@ impl CommentAggregates {
|
|||
.first::<Self>(conn)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn update_hot_rank(pool: &DbPool, comment_id: CommentId) -> Result<Self, Error> {
|
||||
let conn = &mut get_conn(pool).await?;
|
||||
|
||||
diesel::update(comment_aggregates::table)
|
||||
.filter(comment_aggregates::comment_id.eq(comment_id))
|
||||
.set(comment_aggregates::hot_rank.eq(hot_rank(
|
||||
comment_aggregates::score,
|
||||
comment_aggregates::published,
|
||||
)))
|
||||
.get_result::<Self>(conn)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
@ -2,7 +2,7 @@ use crate::{
|
|||
aggregates::structs::PostAggregates,
|
||||
newtypes::PostId,
|
||||
schema::post_aggregates,
|
||||
utils::{get_conn, DbPool},
|
||||
utils::{functions::hot_rank, get_conn, DbPool},
|
||||
};
|
||||
use diesel::{result::Error, ExpressionMethods, QueryDsl};
|
||||
use diesel_async::RunQueryDsl;
|
||||
|
@ -15,6 +15,22 @@ impl PostAggregates {
|
|||
.first::<Self>(conn)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn update_hot_rank(pool: &DbPool, post_id: PostId) -> Result<Self, Error> {
|
||||
let conn = &mut get_conn(pool).await?;
|
||||
|
||||
diesel::update(post_aggregates::table)
|
||||
.filter(post_aggregates::post_id.eq(post_id))
|
||||
.set((
|
||||
post_aggregates::hot_rank.eq(hot_rank(post_aggregates::score, post_aggregates::published)),
|
||||
post_aggregates::hot_rank_active.eq(hot_rank(
|
||||
post_aggregates::score,
|
||||
post_aggregates::newest_comment_time_necro,
|
||||
)),
|
||||
))
|
||||
.get_result::<Self>(conn)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
Loading…
Reference in a new issue