diff options
author | Dessalines <tyhou13@gmx.com> | 2019-12-08 12:39:54 -0800 |
---|---|---|
committer | Dessalines <tyhou13@gmx.com> | 2019-12-08 12:39:54 -0800 |
commit | d18f2c9eb1ca4b121886fe0f2def426bf5ce1ad6 (patch) | |
tree | 645b0706bfbd323db23cfa0fe447f13e28cb8709 /server/src/api | |
parent | 13f8608e05cf6da1c6f4146680296d78e67aa88c (diff) |
Use builder pattern for views
- Fixes #360
Diffstat (limited to 'server/src/api')
-rw-r--r-- | server/src/api/community.rs | 10 | ||||
-rw-r--r-- | server/src/api/post.rs | 16 | ||||
-rw-r--r-- | server/src/api/site.rs | 80 | ||||
-rw-r--r-- | server/src/api/user.rs | 92 |
4 files changed, 86 insertions, 112 deletions
diff --git a/server/src/api/community.rs b/server/src/api/community.rs index 69113d52..5bd60007 100644 --- a/server/src/api/community.rs +++ b/server/src/api/community.rs @@ -349,9 +349,13 @@ impl Perform<ListCommunitiesResponse> for Oper<ListCommunities> { let sort = SortType::from_str(&data.sort)?; - let communities: Vec<CommunityView> = CommunityView::list( - &conn, &sort, user_id, show_nsfw, None, data.page, data.limit, - )?; + let communities = CommunityQueryBuilder::create(&conn) + .sort(&sort) + .from_user_id_optional(user_id) + .show_nsfw(show_nsfw) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; // Return the jwt Ok(ListCommunitiesResponse { diff --git a/server/src/api/post.rs b/server/src/api/post.rs index e1c9b778..5b41b426 100644 --- a/server/src/api/post.rs +++ b/server/src/api/post.rs @@ -178,17 +178,11 @@ impl Perform<GetPostResponse> for Oper<GetPost> { Err(_e) => return Err(APIError::err(&self.op, "couldnt_find_post"))?, }; - let comments = CommentView::list( - &conn, - &SortType::New, - Some(data.id), - None, - None, - user_id, - false, - None, - Some(9999), - )?; + let comments = CommentQueryBuilder::create(&conn) + .for_post_id(data.id) + .my_user_id_optional(user_id) + .limit(9999) + .list()?; let community = CommunityView::read(&conn, post_view.community_id, user_id)?; diff --git a/server/src/api/site.rs b/server/src/api/site.rs index 0e780b38..e2963d8c 100644 --- a/server/src/api/site.rs +++ b/server/src/api/site.rs @@ -329,31 +329,28 @@ impl Perform<SearchResponse> for Oper<Search> { .list()?; } SearchType::Comments => { - comments = CommentView::list( - &conn, - &sort, - None, - None, - Some(data.q.to_owned()), - None, - false, - data.page, - data.limit, - )?; + comments = CommentQueryBuilder::create(&conn) + .sort(&sort) + .search_term(data.q.to_owned()) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; } SearchType::Communities => { - communities = CommunityView::list( - &conn, - &sort, - None, - true, - Some(data.q.to_owned()), - data.page, - data.limit, - )?; + communities = CommunityQueryBuilder::create(&conn) + .sort(&sort) + .search_term(data.q.to_owned()) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; } SearchType::Users => { - users = UserView::list(&conn, &sort, Some(data.q.to_owned()), data.page, data.limit)?; + users = UserQueryBuilder::create(&conn) + .sort(&sort) + .search_term(data.q.to_owned()) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; } SearchType::All => { posts = PostQueryBuilder::create(&conn) @@ -365,27 +362,26 @@ impl Perform<SearchResponse> for Oper<Search> { .limit_optional(data.limit) .list()?; - comments = CommentView::list( - &conn, - &sort, - None, - None, - Some(data.q.to_owned()), - None, - false, - data.page, - data.limit, - )?; - communities = CommunityView::list( - &conn, - &sort, - None, - true, - Some(data.q.to_owned()), - data.page, - data.limit, - )?; - users = UserView::list(&conn, &sort, Some(data.q.to_owned()), data.page, data.limit)?; + comments = CommentQueryBuilder::create(&conn) + .sort(&sort) + .search_term(data.q.to_owned()) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; + + communities = CommunityQueryBuilder::create(&conn) + .sort(&sort) + .search_term(data.q.to_owned()) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; + + users = UserQueryBuilder::create(&conn) + .sort(&sort) + .search_term(data.q.to_owned()) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; } SearchType::Url => { posts = PostQueryBuilder::create(&conn) diff --git a/server/src/api/user.rs b/server/src/api/user.rs index e3d67451..7f7af813 100644 --- a/server/src/api/user.rs +++ b/server/src/api/user.rs @@ -375,38 +375,22 @@ impl Perform<GetUserDetailsResponse> for Oper<GetUserDetails> { .page_optional(data.page) .limit_optional(data.limit); + let mut comments_query = CommentQueryBuilder::create(&conn) + .sort(&sort) + .saved_only(data.saved_only) + .my_user_id_optional(user_id) + .page_optional(data.page) + .limit_optional(data.limit); + // If its saved only, you don't care what creator it was + // Or, if its not saved, then you only want it for that specific creator if !data.saved_only { posts_query = posts_query.for_creator_id(user_details_id); + comments_query = comments_query.for_creator_id(user_details_id); } let posts = posts_query.list()?; - - let comments = if data.saved_only { - CommentView::list( - &conn, - &sort, - None, - None, - None, - Some(user_details_id), - data.saved_only, - data.page, - data.limit, - )? - } else { - CommentView::list( - &conn, - &sort, - None, - Some(user_details_id), - None, - user_id, - data.saved_only, - data.page, - data.limit, - )? - }; + let comments = comments_query.list()?; let follows = CommunityFollowerView::for_user(&conn, user_details_id)?; let moderates = CommunityModeratorView::for_user(&conn, user_details_id)?; @@ -569,14 +553,12 @@ impl Perform<GetRepliesResponse> for Oper<GetReplies> { let sort = SortType::from_str(&data.sort)?; - let replies = ReplyView::get_replies( - &conn, - user_id, - &sort, - data.unread_only, - data.page, - data.limit, - )?; + let replies = ReplyQueryBuilder::create(&conn, user_id) + .sort(&sort) + .unread_only(data.unread_only) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; Ok(GetRepliesResponse { op: self.op.to_string(), @@ -599,14 +581,12 @@ impl Perform<GetUserMentionsResponse> for Oper<GetUserMentions> { let sort = SortType::from_str(&data.sort)?; - let mentions = UserMentionView::get_mentions( - &conn, - user_id, - &sort, - data.unread_only, - data.page, - data.limit, - )?; + let mentions = UserMentionQueryBuilder::create(&conn, user_id) + .sort(&sort) + .unread_only(data.unread_only) + .page_optional(data.page) + .limit_optional(data.limit) + .list()?; Ok(GetUserMentionsResponse { op: self.op.to_string(), @@ -662,7 +642,11 @@ impl Perform<GetRepliesResponse> for Oper<MarkAllAsRead> { let user_id = claims.id; - let replies = ReplyView::get_replies(&conn, user_id, &SortType::New, true, Some(1), Some(999))?; + let replies = ReplyQueryBuilder::create(&conn, user_id) + .unread_only(true) + .page(1) + .limit(999) + .list()?; for reply in &replies { let comment_form = CommentForm { @@ -683,8 +667,11 @@ impl Perform<GetRepliesResponse> for Oper<MarkAllAsRead> { } // Mentions - let mentions = - UserMentionView::get_mentions(&conn, user_id, &SortType::New, true, Some(1), Some(999))?; + let mentions = UserMentionQueryBuilder::create(&conn, user_id) + .unread_only(true) + .page(1) + .limit(999) + .list()?; for mention in &mentions { let mention_form = UserMentionForm { @@ -728,17 +715,10 @@ impl Perform<LoginResponse> for Oper<DeleteAccount> { } // Comments - let comments = CommentView::list( - &conn, - &SortType::New, - None, - Some(user_id), - None, - None, - false, - None, - Some(std::i64::MAX), - )?; + let comments = CommentQueryBuilder::create(&conn) + .for_creator_id(user_id) + .limit(std::i64::MAX) + .list()?; for comment in &comments { let comment_form = CommentForm { |