Skip to content

Commit

Permalink
New parameter read_only for /api/v3/post/list (#5264)
Browse files Browse the repository at this point in the history
* added option to get only read only posts with unittests

* formatted code

* added index on (person_id, read) on post actions where read is not null

* formatted sql

* Update migrations/2024-12-15-151642_add_index_on_person_id_read_for_read_only_post_actions/up.sql

Co-authored-by: dullbananas <[email protected]>

* Fixxed error in down.sql for migration of index on (person_id,read_only,post_id) on post_actions

* Fixxed error in unittests

* Update crates/db_views/src/post_view.rs

Co-authored-by: dullbananas <[email protected]>

---------

Co-authored-by: dullbananas <[email protected]>
  • Loading branch information
leoseg and dullbananas authored Jan 3, 2025
1 parent c656465 commit ba779b9
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 0 deletions.
2 changes: 2 additions & 0 deletions crates/api_common/src/post.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ pub struct GetPosts {
#[cfg_attr(feature = "full", ts(optional))]
pub saved_only: Option<bool>,
#[cfg_attr(feature = "full", ts(optional))]
pub read_only: Option<bool>,
#[cfg_attr(feature = "full", ts(optional))]
pub liked_only: Option<bool>,
#[cfg_attr(feature = "full", ts(optional))]
pub disliked_only: Option<bool>,
Expand Down
2 changes: 2 additions & 0 deletions crates/apub/src/api/list_posts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -78,6 +79,7 @@ pub async fn list_posts(
sort,
community_id,
saved_only,
read_only,
liked_only,
disliked_only,
page,
Expand Down
35 changes: 35 additions & 0 deletions crates/db_views/src/post_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,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 !o.show_read.unwrap_or(o.local_user.show_read_posts()) {
Expand Down Expand Up @@ -510,6 +516,7 @@ pub struct PostQuery<'a> {
pub search_term: Option<String>,
pub url_only: Option<bool>,
pub saved_only: Option<bool>,
pub read_only: Option<bool>,
pub liked_only: Option<bool>,
pub disliked_only: Option<bool>,
pub title_only: Option<bool>,
Expand Down Expand Up @@ -1236,6 +1243,34 @@ mod tests {
Ok(())
}

#[test_context(Data)]
#[tokio::test]
#[serial]
async fn post_listing_read_only(data: &mut Data) -> LemmyResult<()> {
let pool = &data.pool();
let pool = &mut pool.into();

// Only mark the bot post as read
// The read_only should only show the bot post
let post_read_form =
PostReadForm::new(data.inserted_bot_post.id, data.local_user_view.person.id);
PostRead::mark_as_read(pool, &post_read_form).await?;

// Only read the post marked as read
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));

Ok(())
}

#[test_context(Data)]
#[tokio::test]
#[serial]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DROP INDEX idx_post_actions_on_read_read_not_null;

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CREATE INDEX idx_post_actions_on_read_read_not_null ON post_actions (person_id, read, post_id)
WHERE
read IS NOT NULL;

0 comments on commit ba779b9

Please sign in to comment.