From 3518f3f1219c638d8ae9d29251c0773b193e39aa Mon Sep 17 00:00:00 2001 From: lseeger Date: Sat, 14 Dec 2024 16:31:56 +0100 Subject: [PATCH] added option to get only read only posts with unittests --- crates/api_common/src/post.rs | 2 ++ crates/apub/src/api/list_posts.rs | 2 ++ crates/db_views/src/post_view.rs | 35 +++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/crates/api_common/src/post.rs b/crates/api_common/src/post.rs index 405de3a92..0261a1a0c 100644 --- a/crates/api_common/src/post.rs +++ b/crates/api_common/src/post.rs @@ -97,6 +97,8 @@ pub struct GetPosts { #[cfg_attr(feature = "full", ts(optional))] pub saved_only: Option, #[cfg_attr(feature = "full", ts(optional))] + pub read_only: Option, + #[cfg_attr(feature = "full", ts(optional))] pub liked_only: Option, #[cfg_attr(feature = "full", ts(optional))] pub disliked_only: Option, diff --git a/crates/apub/src/api/list_posts.rs b/crates/apub/src/api/list_posts.rs index 63e737fdd..20e25f9a5 100644 --- a/crates/apub/src/api/list_posts.rs +++ b/crates/apub/src/api/list_posts.rs @@ -42,6 +42,7 @@ pub async fn list_posts( data.community_id }; let saved_only = data.saved_only; + let read_only = data.read_only; let show_hidden = data.show_hidden; let show_read = data.show_read; let show_nsfw = data.show_nsfw; @@ -78,6 +79,7 @@ pub async fn list_posts( sort, community_id, saved_only, + read_only, liked_only, disliked_only, page, diff --git a/crates/db_views/src/post_view.rs b/crates/db_views/src/post_view.rs index c6d1b036f..3f9ccb5db 100644 --- a/crates/db_views/src/post_view.rs +++ b/crates/db_views/src/post_view.rs @@ -293,6 +293,12 @@ fn queries<'a>() -> Queries< .filter(post_actions::saved.is_not_null()) .then_order_by(post_actions::saved.desc()); } + + if options.read_only.unwrap_or_default() { + query = query + .filter(post_actions::read.is_not_null()) + .then_order_by(post_actions::read.desc()) + } // Only hide the read posts, if the saved_only is false. Otherwise ppl with the hide_read // setting wont be able to see saved posts. else if !options @@ -489,6 +495,7 @@ pub struct PostQuery<'a> { pub search_term: Option, pub url_only: Option, pub saved_only: Option, + pub read_only: Option, pub liked_only: Option, pub disliked_only: Option, pub title_only: Option, @@ -1118,6 +1125,34 @@ mod tests { cleanup(data, pool).await } + #[tokio::test] + #[serial] + async fn post_listing_read_only() -> LemmyResult<()> { + let pool = &build_db_pool()?; + let pool = &mut pool.into(); + let data = init_data(pool).await?; + + // Read only the bot post + // The read_only should only show the bot post + let post_save_form = + PostReadForm::new(data.inserted_bot_post.id, data.local_user_view.person.id); + PostRead::mark_as_read(pool, &post_save_form).await?; + + // Read the saved only + let read_read_post_listing = PostQuery { + community_id: Some(data.inserted_community.id), + read_only: Some(true), + ..data.default_post_query() + } + .list(&data.site, pool) + .await?; + + // This should only include the bot post, not the one you created + assert_eq!(vec![POST_BY_BOT], names(&read_read_post_listing)); + + cleanup(data, pool).await + } + #[tokio::test] #[serial] async fn creator_info() -> LemmyResult<()> {