* List distinguished comments first (fixes #3843) * then_order_by * Fixing assert. * move line * then --------- Co-authored-by: Dessalines <tyhou13@gmx.com>
This commit is contained in:
parent
3a19af5215
commit
d827af725a
1 changed files with 36 additions and 3 deletions
|
@ -234,7 +234,7 @@ fn queries<'a>() -> Queries<
|
||||||
// only order if filtering by a post id, or parent_path. DOS potential otherwise and max_depth + !post_id isn't used anyways (afaik)
|
// only order if filtering by a post id, or parent_path. DOS potential otherwise and max_depth + !post_id isn't used anyways (afaik)
|
||||||
if options.post_id.is_some() || options.parent_path.is_some() {
|
if options.post_id.is_some() || options.parent_path.is_some() {
|
||||||
// Always order by the parent path first
|
// Always order by the parent path first
|
||||||
query = query.order_by(subpath(comment::path, 0, -1));
|
query = query.then_order_by(subpath(comment::path, 0, -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO limit question. Limiting does not work for comment threads ATM, only max_depth
|
// TODO limit question. Limiting does not work for comment threads ATM, only max_depth
|
||||||
|
@ -253,6 +253,11 @@ fn queries<'a>() -> Queries<
|
||||||
limit_and_offset(options.page, options.limit)?
|
limit_and_offset(options.page, options.limit)?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// distinguished comments should go first when viewing post
|
||||||
|
if options.post_id.is_some() || options.parent_path.is_some() {
|
||||||
|
query = query.then_order_by(comment::distinguished.desc());
|
||||||
|
}
|
||||||
|
|
||||||
query = match options.sort.unwrap_or(CommentSortType::Hot) {
|
query = match options.sort.unwrap_or(CommentSortType::Hot) {
|
||||||
CommentSortType::Hot => query
|
CommentSortType::Hot => query
|
||||||
.then_order_by(comment_aggregates::hot_rank.desc())
|
.then_order_by(comment_aggregates::hot_rank.desc())
|
||||||
|
@ -262,7 +267,7 @@ fn queries<'a>() -> Queries<
|
||||||
}
|
}
|
||||||
CommentSortType::New => query.then_order_by(comment::published.desc()),
|
CommentSortType::New => query.then_order_by(comment::published.desc()),
|
||||||
CommentSortType::Old => query.then_order_by(comment::published.asc()),
|
CommentSortType::Old => query.then_order_by(comment::published.asc()),
|
||||||
CommentSortType::Top => query.order_by(comment_aggregates::score.desc()),
|
CommentSortType::Top => query.then_order_by(comment_aggregates::score.desc()),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Note: deleted and removed comments are done on the front side
|
// Note: deleted and removed comments are done on the front side
|
||||||
|
@ -332,7 +337,7 @@ mod tests {
|
||||||
newtypes::LanguageId,
|
newtypes::LanguageId,
|
||||||
source::{
|
source::{
|
||||||
actor_language::LocalUserLanguage,
|
actor_language::LocalUserLanguage,
|
||||||
comment::{Comment, CommentInsertForm, CommentLike, CommentLikeForm},
|
comment::{Comment, CommentInsertForm, CommentLike, CommentLikeForm, CommentUpdateForm},
|
||||||
community::{Community, CommunityInsertForm},
|
community::{Community, CommunityInsertForm},
|
||||||
instance::Instance,
|
instance::Instance,
|
||||||
language::Language,
|
language::Language,
|
||||||
|
@ -746,6 +751,34 @@ mod tests {
|
||||||
cleanup(data, pool).await;
|
cleanup(data, pool).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
#[serial]
|
||||||
|
async fn test_distinguished_first() {
|
||||||
|
let pool = &build_db_pool_for_tests().await;
|
||||||
|
let pool = &mut pool.into();
|
||||||
|
let data = init_data(pool).await;
|
||||||
|
|
||||||
|
let form = CommentUpdateForm {
|
||||||
|
distinguished: Some(true),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
Comment::update(pool, data.inserted_comment_2.id, &form)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let comments = CommentQuery {
|
||||||
|
post_id: Some(data.inserted_comment_2.post_id),
|
||||||
|
..Default::default()
|
||||||
|
}
|
||||||
|
.list(pool)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(comments[0].comment.id, data.inserted_comment_2.id);
|
||||||
|
assert!(comments[0].comment.distinguished);
|
||||||
|
|
||||||
|
cleanup(data, pool).await;
|
||||||
|
}
|
||||||
|
|
||||||
async fn cleanup(data: Data, pool: &mut DbPool<'_>) {
|
async fn cleanup(data: Data, pool: &mut DbPool<'_>) {
|
||||||
CommentLike::remove(
|
CommentLike::remove(
|
||||||
pool,
|
pool,
|
||||||
|
|
Loading…
Reference in a new issue