]> Untitled Git - lemmy.git/commitdiff
Fixing duped report view for admins. Fixes #1933 (#1945)
authorDessalines <dessalines@users.noreply.github.com>
Tue, 23 Nov 2021 15:54:30 +0000 (10:54 -0500)
committerGitHub <noreply@github.com>
Tue, 23 Nov 2021 15:54:30 +0000 (15:54 +0000)
* Fixing duped report view for admins. Fixes #1933

* Fixing tests.

crates/db_views/src/comment_report_view.rs
crates/db_views/src/post_report_view.rs
migrations/2021-11-23-031528_add_report_published_index/down.sql [new file with mode: 0644]
migrations/2021-11-23-031528_add_report_published_index/up.sql [new file with mode: 0644]

index 5b39a5eb50f2c8dfbc3fa2bbe3bd46a5a777c57a..343851751251a233f64c4598b5bc6a3b4aa744a4 100644 (file)
@@ -147,22 +147,28 @@ impl CommentReportView {
     let mut query = comment_report::table
       .inner_join(comment::table)
       .inner_join(post::table.on(comment::post_id.eq(post::id)))
-      .inner_join(
-        community_moderator::table.on(community_moderator::community_id.eq(post::community_id)),
-      )
       .filter(comment_report::resolved.eq(false))
       .into_boxed();
 
-    // If its not an admin, get only the ones you mod
-    if !admin {
-      query = query.filter(community_moderator::person_id.eq(my_person_id));
-    }
-
     if let Some(community_id) = community_id {
       query = query.filter(post::community_id.eq(community_id))
     }
 
-    query.select(count(comment_report::id)).first::<i64>(conn)
+    // If its not an admin, get only the ones you mod
+    if !admin {
+      query
+        .inner_join(
+          community_moderator::table.on(
+            community_moderator::community_id
+              .eq(post::community_id)
+              .and(community_moderator::person_id.eq(my_person_id)),
+          ),
+        )
+        .select(count(comment_report::id))
+        .first::<i64>(conn)
+    } else {
+      query.select(count(comment_report::id)).first::<i64>(conn)
+    }
   }
 }
 
@@ -216,10 +222,6 @@ impl<'a> CommentReportQueryBuilder<'a> {
       .inner_join(community::table.on(post::community_id.eq(community::id)))
       .inner_join(person::table.on(comment_report::creator_id.eq(person::id)))
       .inner_join(person_alias_1::table.on(comment::creator_id.eq(person_alias_1::id)))
-      // Test this join
-      .inner_join(
-        community_moderator::table.on(community_moderator::community_id.eq(post::community_id)),
-      )
       .inner_join(
         comment_aggregates::table.on(comment_report::comment_id.eq(comment_aggregates::comment_id)),
       )
@@ -254,11 +256,6 @@ impl<'a> CommentReportQueryBuilder<'a> {
       ))
       .into_boxed();
 
-    // If its not an admin, get only the ones you mod
-    if !self.admin {
-      query = query.filter(community_moderator::person_id.eq(self.my_person_id));
-    }
-
     if let Some(community_id) = self.community_id {
       query = query.filter(post::community_id.eq(community_id));
     }
@@ -269,11 +266,25 @@ impl<'a> CommentReportQueryBuilder<'a> {
 
     let (limit, offset) = limit_and_offset(self.page, self.limit);
 
-    let res = query
-      .order_by(comment_report::published.asc())
+    query = query
+      .order_by(comment_report::published.desc())
       .limit(limit)
-      .offset(offset)
-      .load::<CommentReportViewTuple>(self.conn)?;
+      .offset(offset);
+
+    // If its not an admin, get only the ones you mod
+    let res = if !self.admin {
+      query
+        .inner_join(
+          community_moderator::table.on(
+            community_moderator::community_id
+              .eq(post::community_id)
+              .and(community_moderator::person_id.eq(self.my_person_id)),
+          ),
+        )
+        .load::<CommentReportViewTuple>(self.conn)?
+    } else {
+      query.load::<CommentReportViewTuple>(self.conn)?
+    };
 
     Ok(CommentReportView::from_tuple_to_vec(res))
   }
@@ -498,8 +509,8 @@ mod tests {
     assert_eq!(
       reports,
       [
-        expected_sara_report_view.to_owned(),
-        expected_jessica_report_view.to_owned()
+        expected_jessica_report_view.to_owned(),
+        expected_sara_report_view.to_owned()
       ]
     );
 
index f27ba50aad520c82f12d6b2878a515b4e40db4e2..e5594487c473d2686ee177cbfbceba7fba6b8a04 100644 (file)
@@ -131,23 +131,28 @@ impl PostReportView {
     use diesel::dsl::*;
     let mut query = post_report::table
       .inner_join(post::table)
-      // Test this join
-      .inner_join(
-        community_moderator::table.on(community_moderator::community_id.eq(post::community_id)),
-      )
       .filter(post_report::resolved.eq(false))
       .into_boxed();
 
-    // If its not an admin, get only the ones you mod
-    if !admin {
-      query = query.filter(community_moderator::person_id.eq(my_person_id));
-    }
-
     if let Some(community_id) = community_id {
       query = query.filter(post::community_id.eq(community_id))
     }
 
-    query.select(count(post_report::id)).first::<i64>(conn)
+    // If its not an admin, get only the ones you mod
+    if !admin {
+      query
+        .inner_join(
+          community_moderator::table.on(
+            community_moderator::community_id
+              .eq(post::community_id)
+              .and(community_moderator::person_id.eq(my_person_id)),
+          ),
+        )
+        .select(count(post_report::id))
+        .first::<i64>(conn)
+    } else {
+      query.select(count(post_report::id)).first::<i64>(conn)
+    }
   }
 }
 
@@ -200,9 +205,6 @@ impl<'a> PostReportQueryBuilder<'a> {
       .inner_join(community::table.on(post::community_id.eq(community::id)))
       .inner_join(person::table.on(post_report::creator_id.eq(person::id)))
       .inner_join(person_alias_1::table.on(post::creator_id.eq(person_alias_1::id)))
-      .inner_join(
-        community_moderator::table.on(community_moderator::community_id.eq(post::community_id)),
-      )
       .left_join(
         community_person_ban::table.on(
           post::community_id
@@ -234,11 +236,6 @@ impl<'a> PostReportQueryBuilder<'a> {
       ))
       .into_boxed();
 
-    // If its not an admin, get only the ones you mod
-    if !self.admin {
-      query = query.filter(community_moderator::person_id.eq(self.my_person_id));
-    }
-
     if let Some(community_id) = self.community_id {
       query = query.filter(post::community_id.eq(community_id));
     }
@@ -249,11 +246,25 @@ impl<'a> PostReportQueryBuilder<'a> {
 
     let (limit, offset) = limit_and_offset(self.page, self.limit);
 
-    let res = query
-      .order_by(post_report::published.asc())
+    query = query
+      .order_by(post_report::published.desc())
       .limit(limit)
-      .offset(offset)
-      .load::<PostReportViewTuple>(self.conn)?;
+      .offset(offset);
+
+    // If its not an admin, get only the ones you mod
+    let res = if !self.admin {
+      query
+        .inner_join(
+          community_moderator::table.on(
+            community_moderator::community_id
+              .eq(post::community_id)
+              .and(community_moderator::person_id.eq(self.my_person_id)),
+          ),
+        )
+        .load::<PostReportViewTuple>(self.conn)?
+    } else {
+      query.load::<PostReportViewTuple>(self.conn)?
+    };
 
     Ok(PostReportView::from_tuple_to_vec(res))
   }
@@ -481,8 +492,8 @@ mod tests {
     assert_eq!(
       reports,
       [
-        expected_sara_report_view.to_owned(),
-        expected_jessica_report_view.to_owned()
+        expected_jessica_report_view.to_owned(),
+        expected_sara_report_view.to_owned()
       ]
     );
 
diff --git a/migrations/2021-11-23-031528_add_report_published_index/down.sql b/migrations/2021-11-23-031528_add_report_published_index/down.sql
new file mode 100644 (file)
index 0000000..b5e9b51
--- /dev/null
@@ -0,0 +1,2 @@
+drop index idx_comment_report_published;
+drop index idx_post_report_published;
diff --git a/migrations/2021-11-23-031528_add_report_published_index/up.sql b/migrations/2021-11-23-031528_add_report_published_index/up.sql
new file mode 100644 (file)
index 0000000..eb0c122
--- /dev/null
@@ -0,0 +1,2 @@
+create index idx_comment_report_published on comment_report (published desc);
+create index idx_post_report_published on post_report (published desc);