diff options
Diffstat (limited to 'server/src/db/post_view.rs')
-rw-r--r-- | server/src/db/post_view.rs | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/server/src/db/post_view.rs b/server/src/db/post_view.rs index 4d09308d..d6a1d191 100644 --- a/server/src/db/post_view.rs +++ b/server/src/db/post_view.rs @@ -121,6 +121,9 @@ pub struct PostQueryBuilder<'a> { sort: &'a SortType, my_user_id: Option<i32>, for_creator_id: Option<i32>, + for_community_id: Option<i32>, + search_term: Option<String>, + url_search: Option<String>, show_nsfw: bool, saved_only: bool, unread_only: bool, @@ -137,10 +140,13 @@ impl<'a> PostQueryBuilder<'a> { PostQueryBuilder { conn, query, - my_user_id: None, - for_creator_id: None, listing_type: ListingType::All, sort: &SortType::Hot, + my_user_id: None, + for_creator_id: None, + for_community_id: None, + search_term: None, + url_search: None, show_nsfw: true, saved_only: false, unread_only: false, @@ -160,38 +166,22 @@ impl<'a> PostQueryBuilder<'a> { } pub fn for_community_id<T: MaybeOptional<i32>>(mut self, for_community_id: T) -> Self { - use super::post_view::post_mview::dsl::*; - if let Some(for_community_id) = for_community_id.get_optional() { - self.query = self.query.filter(community_id.eq(for_community_id)); - self.query = self.query.then_order_by(stickied.desc()); - } + self.for_community_id = for_community_id.get_optional(); self } pub fn for_creator_id<T: MaybeOptional<i32>>(mut self, for_creator_id: T) -> Self { - if let Some(for_creator_id) = for_creator_id.get_optional() { - self.for_creator_id = Some(for_creator_id); - } + self.for_creator_id = for_creator_id.get_optional(); self } pub fn search_term<T: MaybeOptional<String>>(mut self, search_term: T) -> Self { - use super::post_view::post_mview::dsl::*; - if let Some(search_term) = search_term.get_optional() { - let searcher = fuzzy_search(&search_term); - self.query = self - .query - .filter(name.ilike(searcher.to_owned())) - .or_filter(body.ilike(searcher)); - } + self.search_term = search_term.get_optional(); self } pub fn url_search<T: MaybeOptional<String>>(mut self, url_search: T) -> Self { - use super::post_view::post_mview::dsl::*; - if let Some(url_search) = url_search.get_optional() { - self.query = self.query.filter(url.eq(url_search)); - } + self.url_search = url_search.get_optional(); self } @@ -234,6 +224,22 @@ impl<'a> PostQueryBuilder<'a> { query = query.filter(subscribed.eq(true)); } + if let Some(for_community_id) = self.for_community_id { + query = query.filter(community_id.eq(for_community_id)); + query = query.then_order_by(stickied.desc()); + } + + if let Some(url_search) = self.url_search { + query = query.filter(url.eq(url_search)); + } + + if let Some(search_term) = self.search_term { + let searcher = fuzzy_search(&search_term); + query = query + .filter(name.ilike(searcher.to_owned())) + .or_filter(body.ilike(searcher)); + } + query = match self.sort { SortType::Hot => query .then_order_by(hot_rank.desc()) |