* Calculate initial hot_rank when receiving posts and comments from other instances
* Move hot rank update logic into db_schema
utils::{check_post_deleted_or_removed, is_mod_or_admin},
};
use lemmy_db_schema::{
+ aggregates::structs::CommentAggregates,
newtypes::PersonId,
source::{
comment::{Comment, CommentLike, CommentLikeForm},
};
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?;
post::{CreatePost, EditPost, PostResponse},
};
use lemmy_db_schema::{
+ aggregates::structs::PostAggregates,
newtypes::PersonId,
source::{
community::Community,
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(())
}
}
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;
.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)]
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;
.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)]