]> Untitled Git - lemmy.git/blobdiff - crates/api_crud/src/comment/list.rs
Showing # of unread comments for posts. Fixes #2134 (#2393)
[lemmy.git] / crates / api_crud / src / comment / list.rs
index f9c37de4821df3090f7484b9a219b943e4ede568..e8ff8c1800cf01cca1a8b13a7de39fb601ad7da8 100644 (file)
@@ -2,12 +2,20 @@ use crate::PerformCrud;
 use actix_web::web::Data;
 use lemmy_api_common::{
   comment::{GetComments, GetCommentsResponse},
-  utils::{blocking, check_private_instance, get_local_user_view_from_jwt_opt},
+  utils::{
+    blocking,
+    check_private_instance,
+    get_local_user_view_from_jwt_opt,
+    listing_type_with_site_default,
+  },
 };
 use lemmy_apub::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity};
-use lemmy_db_schema::{source::community::Community, traits::DeleteableOrRemoveable};
-use lemmy_db_views::comment_view::CommentQueryBuilder;
-use lemmy_utils::{ConnectionId, LemmyError};
+use lemmy_db_schema::{
+  source::{comment::Comment, community::Community},
+  traits::{Crud, DeleteableOrRemoveable},
+};
+use lemmy_db_views::comment_view::CommentQuery;
+use lemmy_utils::{error::LemmyError, ConnectionId};
 use lemmy_websocket::LemmyContext;
 
 #[async_trait::async_trait(?Send)]
@@ -24,15 +32,11 @@ impl PerformCrud for GetComments {
     let local_user_view =
       get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret())
         .await?;
-
     check_private_instance(&local_user_view, context.pool()).await?;
 
-    let show_bot_accounts = local_user_view
-      .as_ref()
-      .map(|t| t.local_user.show_bot_accounts);
-    let person_id = local_user_view.map(|u| u.person.id);
-
     let community_id = data.community_id;
+    let listing_type = listing_type_with_site_default(data.type_, context.pool()).await?;
+
     let community_actor_id = if let Some(name) = &data.community_name {
       resolve_actor_identifier::<ApubCommunity, Community>(name, context)
         .await
@@ -42,21 +46,41 @@ impl PerformCrud for GetComments {
       None
     };
     let sort = data.sort;
-    let listing_type = data.type_;
+    let max_depth = data.max_depth;
     let saved_only = data.saved_only;
     let page = data.page;
     let limit = data.limit;
+    let parent_id = data.parent_id;
+
+    // If a parent_id is given, fetch the comment to get the path
+    let parent_path = if let Some(parent_id) = parent_id {
+      Some(
+        blocking(context.pool(), move |conn| Comment::read(conn, parent_id))
+          .await??
+          .path,
+      )
+    } else {
+      None
+    };
+
+    let parent_path_cloned = parent_path.to_owned();
+    let post_id = data.post_id;
+    let local_user = local_user_view.map(|l| l.local_user);
     let mut comments = blocking(context.pool(), move |conn| {
-      CommentQueryBuilder::create(conn)
-        .listing_type(listing_type)
+      CommentQuery::builder()
+        .conn(conn)
+        .listing_type(Some(listing_type))
         .sort(sort)
+        .max_depth(max_depth)
         .saved_only(saved_only)
         .community_id(community_id)
         .community_actor_id(community_actor_id)
-        .my_person_id(person_id)
-        .show_bot_accounts(show_bot_accounts)
+        .parent_path(parent_path_cloned)
+        .post_id(post_id)
+        .local_user(local_user.as_ref())
         .page(page)
         .limit(limit)
+        .build()
         .list()
     })
     .await?