summaryrefslogtreecommitdiffstats
path: root/server/src/api
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2019-12-08 12:39:54 -0800
committerDessalines <tyhou13@gmx.com>2019-12-08 12:39:54 -0800
commitd18f2c9eb1ca4b121886fe0f2def426bf5ce1ad6 (patch)
tree645b0706bfbd323db23cfa0fe447f13e28cb8709 /server/src/api
parent13f8608e05cf6da1c6f4146680296d78e67aa88c (diff)
Use builder pattern for views
- Fixes #360
Diffstat (limited to 'server/src/api')
-rw-r--r--server/src/api/community.rs10
-rw-r--r--server/src/api/post.rs16
-rw-r--r--server/src/api/site.rs80
-rw-r--r--server/src/api/user.rs92
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 {