From 53d23c79eefbd82390727f77df792fa27cacc63b Mon Sep 17 00:00:00 2001 From: Dessalines Date: Fri, 8 Mar 2024 09:00:46 -0500 Subject: [PATCH] Adding extra fields to PostReport and CommentReport views. - Fixes #4200 --- Cargo.lock | 2 - crates/db_views/src/comment_report_view.rs | 57 +++++++++++++ crates/db_views/src/post_report_view.rs | 93 +++++++++++++++++++++- crates/db_views/src/structs.rs | 13 +++ 4 files changed, 162 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e4c55f082..b7990d250 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2577,7 +2577,6 @@ version = "0.19.3" dependencies = [ "activitypub_federation", "actix-web", - "anyhow", "chrono", "encoding", "enum-map", @@ -2599,7 +2598,6 @@ dependencies = [ "serde", "serde_with", "serial_test", - "task-local-extensions", "tokio", "tracing", "ts-rs", diff --git a/crates/db_views/src/comment_report_view.rs b/crates/db_views/src/comment_report_view.rs index 6f3322b39..a7895f31c 100644 --- a/crates/db_views/src/comment_report_view.rs +++ b/crates/db_views/src/comment_report_view.rs @@ -18,10 +18,14 @@ use lemmy_db_schema::{ comment_aggregates, comment_like, comment_report, + comment_saved, community, + community_follower, community_moderator, community_person_ban, + local_user, person, + person_block, post, }, utils::{get_conn, limit_and_offset, DbConn, DbPool, ListFn, Queries, ReadFn}, @@ -64,6 +68,45 @@ fn queries<'a>() -> Queries< ), ), ) + .left_join( + aliases::community_moderator1.on( + community::id + .eq(aliases::community_moderator1.field(community_moderator::community_id)) + .and( + aliases::community_moderator1 + .field(community_moderator::person_id) + .eq(comment::creator_id), + ), + ), + ) + .left_join( + local_user::table.on( + comment::creator_id + .eq(local_user::person_id) + .and(local_user::admin.eq(true)), + ), + ) + .left_join( + person_block::table.on( + comment::creator_id + .eq(person_block::target_id) + .and(person_block::person_id.eq(my_person_id)), + ), + ) + .left_join( + community_follower::table.on( + post::community_id + .eq(community_follower::community_id) + .and(community_follower::person_id.eq(my_person_id)), + ), + ) + .left_join( + comment_saved::table.on( + comment::id + .eq(comment_saved::comment_id) + .and(comment_saved::person_id.eq(my_person_id)), + ), + ) .select(( comment_report::all_columns, comment::all_columns, @@ -73,6 +116,14 @@ fn queries<'a>() -> Queries< aliases::person1.fields(person::all_columns), comment_aggregates::all_columns, community_person_ban::community_id.nullable().is_not_null(), + aliases::community_moderator1 + .field(community_moderator::community_id) + .nullable() + .is_not_null(), + local_user::admin.nullable().is_not_null(), + person_block::target_id.nullable().is_not_null(), + community_follower::pending.nullable(), + comment_saved::published.nullable().is_not_null(), comment_like::score.nullable(), aliases::person2.fields(person::all_columns).nullable(), )) @@ -229,6 +280,7 @@ mod tests { traits::{Crud, Joinable, Reportable}, utils::{build_db_pool_for_tests, RANK_DEFAULT}, CommunityVisibility, + SubscribedType, }; use pretty_assertions::assert_eq; use serial_test::serial; @@ -350,6 +402,11 @@ mod tests { comment_report: inserted_jessica_report.clone(), comment: inserted_comment.clone(), post: inserted_post, + creator_is_moderator: true, + creator_is_admin: false, + creator_blocked: false, + subscribed: SubscribedType::NotSubscribed, + saved: false, community: Community { id: inserted_community.id, name: inserted_community.name, diff --git a/crates/db_views/src/post_report_view.rs b/crates/db_views/src/post_report_view.rs index ddd12d226..4cd2f3f4a 100644 --- a/crates/db_views/src/post_report_view.rs +++ b/crates/db_views/src/post_report_view.rs @@ -14,15 +14,31 @@ use lemmy_db_schema::{ newtypes::{CommunityId, PersonId, PostId, PostReportId}, schema::{ community, + community_follower, community_moderator, community_person_ban, + local_user, person, + person_block, + person_post_aggregates, post, post_aggregates, + post_hide, post_like, + post_read, post_report, + post_saved, + }, + utils::{ + functions::coalesce, + get_conn, + limit_and_offset, + DbConn, + DbPool, + ListFn, + Queries, + ReadFn, }, - utils::{get_conn, limit_and_offset, DbConn, DbPool, ListFn, Queries, ReadFn}, }; fn queries<'a>() -> Queries< @@ -42,6 +58,67 @@ fn queries<'a>() -> Queries< .and(community_person_ban::person_id.eq(post::creator_id)), ), ) + .left_join( + aliases::community_moderator1.on( + aliases::community_moderator1 + .field(community_moderator::community_id) + .eq(post::community_id) + .and( + aliases::community_moderator1 + .field(community_moderator::person_id) + .eq(my_person_id), + ), + ), + ) + .left_join( + local_user::table.on( + post::creator_id + .eq(local_user::person_id) + .and(local_user::admin.eq(true)), + ), + ) + .left_join( + post_saved::table.on( + post::id + .eq(post_saved::post_id) + .and(post_saved::person_id.eq(my_person_id)), + ), + ) + .left_join( + post_read::table.on( + post::id + .eq(post_read::post_id) + .and(post_read::person_id.eq(my_person_id)), + ), + ) + .left_join( + post_hide::table.on( + post::id + .eq(post_hide::post_id) + .and(post_hide::person_id.eq(my_person_id)), + ), + ) + .left_join( + person_block::table.on( + post::creator_id + .eq(person_block::target_id) + .and(person_block::person_id.eq(my_person_id)), + ), + ) + .left_join( + person_post_aggregates::table.on( + post::id + .eq(person_post_aggregates::post_id) + .and(person_post_aggregates::person_id.eq(my_person_id)), + ), + ) + .left_join( + community_follower::table.on( + post::community_id + .eq(community_follower::community_id) + .and(community_follower::person_id.eq(my_person_id)), + ), + ) .left_join( post_like::table.on( post::id @@ -61,7 +138,21 @@ fn queries<'a>() -> Queries< person::all_columns, aliases::person1.fields(person::all_columns), community_person_ban::community_id.nullable().is_not_null(), + aliases::community_moderator1 + .field(community_moderator::community_id) + .nullable() + .is_not_null(), + local_user::admin.nullable().is_not_null(), + community_follower::pending.nullable(), + post_saved::post_id.nullable().is_not_null(), + post_read::post_id.nullable().is_not_null(), + post_hide::post_id.nullable().is_not_null(), + person_block::target_id.nullable().is_not_null(), post_like::score.nullable(), + coalesce( + post_aggregates::comments.nullable() - person_post_aggregates::read_comments.nullable(), + post_aggregates::comments, + ), post_aggregates::all_columns, aliases::person2.fields(person::all_columns.nullable()), )) diff --git a/crates/db_views/src/structs.rs b/crates/db_views/src/structs.rs index 9b2d8d602..9254dee00 100644 --- a/crates/db_views/src/structs.rs +++ b/crates/db_views/src/structs.rs @@ -41,6 +41,11 @@ pub struct CommentReportView { pub comment_creator: Person, pub counts: CommentAggregates, pub creator_banned_from_community: bool, + pub creator_is_moderator: bool, + pub creator_is_admin: bool, + pub creator_blocked: bool, + pub subscribed: SubscribedType, + pub saved: bool, pub my_vote: Option, pub resolver: Option, } @@ -90,7 +95,15 @@ pub struct PostReportView { pub creator: Person, pub post_creator: Person, pub creator_banned_from_community: bool, + pub creator_is_moderator: bool, + pub creator_is_admin: bool, + pub subscribed: SubscribedType, + pub saved: bool, + pub read: bool, + pub hidden: bool, + pub creator_blocked: bool, pub my_vote: Option, + pub unread_comments: i64, pub counts: PostAggregates, pub resolver: Option, }