]> Untitled Git - lemmy.git/commitdiff
Removing PostLikeResponse in favor of PostResponse. Consolidating comment and post_sends.
authorDessalines <tyhou13@gmx.com>
Sun, 2 Feb 2020 17:45:41 +0000 (12:45 -0500)
committerDessalines <tyhou13@gmx.com>
Sun, 2 Feb 2020 17:45:41 +0000 (12:45 -0500)
server/src/api/post.rs
server/src/routes/api.rs
server/src/websocket/server.rs
ui/src/components/community.tsx
ui/src/components/main.tsx
ui/src/components/post.tsx
ui/src/components/search.tsx
ui/src/interfaces.ts

index 642521eba16d073800f376e0f8f211ff100abeab..086705bced93fde5ebb8f937e219b0cad9a76de3 100644 (file)
@@ -55,11 +55,6 @@ pub struct CreatePostLike {
   auth: String,
 }
 
-#[derive(Serialize, Deserialize, Clone)]
-pub struct CreatePostLikeResponse {
-  pub post: PostView,
-}
-
 #[derive(Serialize, Deserialize)]
 pub struct EditPost {
   pub edit_id: i32,
@@ -242,8 +237,8 @@ impl Perform<GetPostsResponse> for Oper<GetPosts> {
   }
 }
 
-impl Perform<CreatePostLikeResponse> for Oper<CreatePostLike> {
-  fn perform(&self, conn: &PgConnection) -> Result<CreatePostLikeResponse, Error> {
+impl Perform<PostResponse> for Oper<CreatePostLike> {
+  fn perform(&self, conn: &PgConnection) -> Result<PostResponse, Error> {
     let data: &CreatePostLike = &self.data;
 
     let claims = match Claims::decode(&data.auth) {
@@ -296,7 +291,7 @@ impl Perform<CreatePostLikeResponse> for Oper<CreatePostLike> {
     };
 
     // just output the score
-    Ok(CreatePostLikeResponse { post: post_view })
+    Ok(PostResponse { post: post_view })
   }
 }
 
index 5121d2401f060913e5580e1d73d46a28f72ee97f..29a360e4eb42bb010d12c804229e6edccece6371 100644 (file)
@@ -31,7 +31,7 @@ pub fn config(cfg: &mut web::ServiceConfig) {
     .route("/api/v1/post", web::put().to(route_post::<EditPost, PostResponse>))
     .route("/api/v1/post", web::get().to(route_get::<GetPost, GetPostResponse>))
     .route("/api/v1/post/list", web::get().to(route_get::<GetPosts, GetPostsResponse>))
-    .route("/api/v1/post/like", web::post().to(route_post::<CreatePostLike, CreatePostLikeResponse>))
+    .route("/api/v1/post/like", web::post().to(route_post::<CreatePostLike, PostResponse>))
     .route("/api/v1/post/save", web::put().to(route_post::<SavePost, PostResponse>))
     // Comment
     .route("/api/v1/comment", web::post().to(route_post::<CreateComment, CommentResponse>))
index 369f50f75c2e598f2292be8dc81012f797ea6089..a26c8144e0fd805df43c379180a5b9dd92234b4c 100644 (file)
@@ -204,6 +204,61 @@ impl ChatServer {
     }
   }
 
+  fn comment_sends(
+    &self,
+    user_operation: UserOperation,
+    comment: CommentResponse,
+    id: ConnectionId,
+  ) -> Result<String, Error> {
+    let mut comment_reply_sent = comment.clone();
+    comment_reply_sent.comment.my_vote = None;
+    comment_reply_sent.comment.user_id = None;
+
+    // For the post room ones, and the directs back to the user
+    // strip out the recipient_ids, so that
+    // users don't get double notifs
+    let mut comment_user_sent = comment.clone();
+    comment_user_sent.recipient_ids = Vec::new();
+
+    let mut comment_post_sent = comment_reply_sent.clone();
+    comment_post_sent.recipient_ids = Vec::new();
+
+    let comment_reply_sent_str = to_json_string(&user_operation, &comment_reply_sent)?;
+    let comment_post_sent_str = to_json_string(&user_operation, &comment_post_sent)?;
+    let comment_user_sent_str = to_json_string(&user_operation, &comment_user_sent)?;
+
+    // Send it to the post room
+    self.send_post_room_message(comment.comment.post_id, &comment_post_sent_str, id);
+
+    // Send it to the recipient(s) including the mentioned users
+    for recipient_id in comment_reply_sent.recipient_ids {
+      self.send_user_room_message(recipient_id, &comment_reply_sent_str, id);
+    }
+
+    Ok(comment_user_sent_str)
+  }
+
+  fn post_sends(
+    &self,
+    user_operation: UserOperation,
+    post: PostResponse,
+    id: ConnectionId,
+  ) -> Result<String, Error> {
+    let community_id = post.post.community_id;
+
+    // Don't send my data with it
+    let mut post_sent = post.clone();
+    post_sent.post.my_vote = None;
+    post_sent.post.user_id = None;
+    let post_sent_str = to_json_string(&user_operation, &post_sent)?;
+
+    // Send it to /c/all and that community
+    self.send_community_room_message(0, &post_sent_str, id);
+    self.send_community_room_message(community_id, &post_sent_str, id);
+
+    to_json_string(&user_operation, post)
+  }
+
   fn check_rate_limit_register(&mut self, id: usize) -> Result<(), Error> {
     self.check_rate_limit_full(
       id,
@@ -487,25 +542,6 @@ fn parse_json_message(chat: &mut ChatServer, msg: StandardMessage) -> Result<Str
     UserOperation::ListCategories => {
       do_user_operation::<ListCategories, ListCategoriesResponse>(user_operation, data, &conn)
     }
-    UserOperation::CreatePost => {
-      chat.check_rate_limit_post(msg.id)?;
-      let create_post: CreatePost = serde_json::from_str(data)?;
-      let community_id = create_post.community_id;
-      let res = Oper::new(create_post).perform(&conn)?;
-      let res_str = to_json_string(&user_operation, &res)?;
-
-      // Don't send my data with it
-      let mut post_sent = res;
-      post_sent.post.my_vote = None;
-      post_sent.post.user_id = None;
-      let post_sent_str = to_json_string(&user_operation, &post_sent)?;
-
-      // Send it to /c/all and that community
-      chat.send_community_room_message(0, &post_sent_str, msg.id);
-      chat.send_community_room_message(community_id, &post_sent_str, msg.id);
-
-      Ok(res_str)
-    }
     UserOperation::GetPost => {
       let get_post: GetPost = serde_json::from_str(data)?;
       let post_id = get_post.id;
@@ -529,43 +565,25 @@ fn parse_json_message(chat: &mut ChatServer, msg: StandardMessage) -> Result<Str
       let res = Oper::new(get_posts).perform(&conn)?;
       to_json_string(&user_operation, &res)
     }
-    UserOperation::UserJoin => {
-      let user_join: UserJoin = serde_json::from_str(data)?;
-      let res = Oper::new(user_join).perform(&conn)?;
-      chat.join_user_room(res.user_id, msg.id);
-      to_json_string(&user_operation, &res)
+    UserOperation::CreatePost => {
+      chat.check_rate_limit_post(msg.id)?;
+      let create_post: CreatePost = serde_json::from_str(data)?;
+      let res = Oper::new(create_post).perform(&conn)?;
+
+      chat.post_sends(UserOperation::CreatePost, res, msg.id)
     }
     UserOperation::CreatePostLike => {
       chat.check_rate_limit_message(msg.id)?;
       let create_post_like: CreatePostLike = serde_json::from_str(data)?;
       let res = Oper::new(create_post_like).perform(&conn)?;
-      let community_id = res.post.community_id;
-      let res_str = to_json_string(&user_operation, &res)?;
 
-      // Don't send my data with it
-      let mut post_sent = res;
-      post_sent.post.my_vote = None;
-      post_sent.post.user_id = None;
-      let post_sent_str = to_json_string(&user_operation, &post_sent)?;
-
-      // Send it to /c/all and that community
-      chat.send_community_room_message(0, &post_sent_str, msg.id);
-      chat.send_community_room_message(community_id, &post_sent_str, msg.id);
-
-      Ok(res_str)
+      chat.post_sends(UserOperation::CreatePostLike, res, msg.id)
     }
     UserOperation::EditPost => {
       let edit_post: EditPost = serde_json::from_str(data)?;
       let res = Oper::new(edit_post).perform(&conn)?;
-      let mut post_sent = res.clone();
-      post_sent.post.my_vote = None;
-      post_sent.post.user_id = None;
-      let post_sent_str = to_json_string(&user_operation, &post_sent)?;
-
-      // Send it to /c/all and that community
-      chat.send_community_room_message(0, &post_sent_str, msg.id);
-      chat.send_community_room_message(post_sent.post.community_id, &post_sent_str, msg.id);
-      to_json_string(&user_operation, &res)
+
+      chat.post_sends(UserOperation::EditPost, res, msg.id)
     }
     UserOperation::SavePost => {
       do_user_operation::<SavePost, PostResponse>(user_operation, data, &conn)
@@ -573,48 +591,15 @@ fn parse_json_message(chat: &mut ChatServer, msg: StandardMessage) -> Result<Str
     UserOperation::CreateComment => {
       chat.check_rate_limit_message(msg.id)?;
       let create_comment: CreateComment = serde_json::from_str(data)?;
-      let post_id = create_comment.post_id;
       let res = Oper::new(create_comment).perform(&conn)?;
 
-      let mut comment_user_sent = res.clone();
-      comment_user_sent.comment.my_vote = None;
-      comment_user_sent.comment.user_id = None;
-
-      // For the post room ones, strip out the recipient_ids, so that
-      // users don't get double notifs
-      let mut comment_post_sent = comment_user_sent.clone();
-      comment_post_sent.recipient_ids = Vec::new();
-
-      let comment_user_sent_str = to_json_string(&user_operation, &comment_user_sent)?;
-      let comment_post_sent_str = to_json_string(&user_operation, &comment_post_sent)?;
-
-      // Send it to the post room
-      chat.send_post_room_message(post_id, &comment_post_sent_str, msg.id);
-
-      // Send it to the recipient(s) including the mentioned users
-      for recipient_id in comment_user_sent.recipient_ids {
-        chat.send_user_room_message(recipient_id, &comment_user_sent_str, msg.id);
-      }
-
-      to_json_string(&user_operation, &res)
+      chat.comment_sends(UserOperation::CreateComment, res, msg.id)
     }
     UserOperation::EditComment => {
       let edit_comment: EditComment = serde_json::from_str(data)?;
-      let post_id = edit_comment.post_id;
       let res = Oper::new(edit_comment).perform(&conn)?;
-      let mut comment_sent = res.clone();
-      comment_sent.comment.my_vote = None;
-      comment_sent.comment.user_id = None;
-      let comment_sent_str = to_json_string(&user_operation, &comment_sent)?;
-
-      chat.send_post_room_message(post_id, &comment_sent_str, msg.id);
-
-      // Send it to the recipient(s) including the mentioned users
-      for recipient_id in comment_sent.recipient_ids {
-        chat.send_user_room_message(recipient_id, &comment_sent_str, msg.id);
-      }
 
-      to_json_string(&user_operation, &res)
+      chat.comment_sends(UserOperation::EditComment, res, msg.id)
     }
     UserOperation::SaveComment => {
       do_user_operation::<SaveComment, CommentResponse>(user_operation, data, &conn)
@@ -622,20 +607,9 @@ fn parse_json_message(chat: &mut ChatServer, msg: StandardMessage) -> Result<Str
     UserOperation::CreateCommentLike => {
       chat.check_rate_limit_message(msg.id)?;
       let create_comment_like: CreateCommentLike = serde_json::from_str(data)?;
-      let post_id = create_comment_like.post_id;
       let res = Oper::new(create_comment_like).perform(&conn)?;
-      let mut comment_sent = res.clone();
-      comment_sent.comment.my_vote = None;
-      comment_sent.comment.user_id = None;
-      let comment_sent_str = to_json_string(&user_operation, &comment_sent)?;
-
-      chat.send_post_room_message(post_id, &comment_sent_str, msg.id);
 
-      // Send it to the recipient(s) including the mentioned users
-      for recipient_id in comment_sent.recipient_ids {
-        chat.send_user_room_message(recipient_id, &comment_sent_str, msg.id);
-      }
-      to_json_string(&user_operation, &res)
+      chat.comment_sends(UserOperation::CreateCommentLike, res, msg.id)
     }
     UserOperation::GetModlog => {
       do_user_operation::<GetModlog, GetModlogResponse>(user_operation, data, &conn)
@@ -690,5 +664,11 @@ fn parse_json_message(chat: &mut ChatServer, msg: StandardMessage) -> Result<Str
     UserOperation::GetPrivateMessages => {
       do_user_operation::<GetPrivateMessages, PrivateMessagesResponse>(user_operation, data, &conn)
     }
+    UserOperation::UserJoin => {
+      let user_join: UserJoin = serde_json::from_str(data)?;
+      let res = Oper::new(user_join).perform(&conn)?;
+      chat.join_user_room(res.user_id, msg.id);
+      to_json_string(&user_operation, &res)
+    }
   }
 }
index 866b9eec81d8f4bcbc1296c58dda48f57349b0ec..18767c51c769efbebacb190d933cf118c3cc7840 100644 (file)
@@ -15,7 +15,6 @@ import {
   ListingType,
   GetPostsResponse,
   PostResponse,
-  CreatePostLikeResponse,
   AddModToCommunityResponse,
   BanFromCommunityResponse,
   WebSocketJsonResponse,
@@ -294,7 +293,7 @@ export class Community extends Component<any, State> {
       this.state.posts.unshift(data.post);
       this.setState(this.state);
     } else if (res.op == UserOperation.CreatePostLike) {
-      let data = res.data as CreatePostLikeResponse;
+      let data = res.data as PostResponse;
       let found = this.state.posts.find(c => c.id == data.post.id);
 
       found.score = data.post.score;
index 9ff6af444c50cd43507cd57bc07b2e7ce1763c53..ec801f90204944d9891ffb3150829b58bcfb97db 100644 (file)
@@ -14,7 +14,6 @@ import {
   ListingType,
   SiteResponse,
   GetPostsResponse,
-  CreatePostLikeResponse,
   PostResponse,
   Post,
   GetPostsForm,
@@ -622,7 +621,7 @@ export class Main extends Component<any, MainState> {
 
       this.setState(this.state);
     } else if (res.op == UserOperation.CreatePostLike) {
-      let data = res.data as CreatePostLikeResponse;
+      let data = res.data as PostResponse;
       let found = this.state.posts.find(c => c.id == data.post.id);
 
       found.score = data.post.score;
index fcf794389cb6afe13270b5c73019f64f1a449489..b53d7d4f1c313149d71f713afa0e810a46f136e4 100644 (file)
@@ -11,7 +11,6 @@ import {
   CommentForm as CommentFormI,
   CommentResponse,
   CommentSortType,
-  CreatePostLikeResponse,
   CommunityUser,
   CommunityResponse,
   CommentNode as CommentNodeI,
@@ -401,8 +400,8 @@ export class Post extends Component<any, PostState> {
     } else if (res.op == UserOperation.CreateComment) {
       let data = res.data as CommentResponse;
 
-      // Necessary since a user might receive a comment reply on another thread
-      if (data.comment.post_id == this.state.post.id) {
+      // Necessary since it might be a user reply
+      if (data.recipient_ids.length == 0) {
         this.state.comments.unshift(data.comment);
         this.setState(this.state);
       }
@@ -439,7 +438,7 @@ export class Post extends Component<any, PostState> {
       }
       this.setState(this.state);
     } else if (res.op == UserOperation.CreatePostLike) {
-      let data = res.data as CreatePostLikeResponse;
+      let data = res.data as PostResponse;
       this.state.post.score = data.post.score;
       this.state.post.upvotes = data.post.upvotes;
       this.state.post.downvotes = data.post.downvotes;
index 604c261730f600965db7080c5070db09f2836d69..f376f609cfb2966633e7a50b4417f8a7258089b5 100644 (file)
@@ -12,7 +12,7 @@ import {
   SearchForm,
   SearchResponse,
   SearchType,
-  CreatePostLikeResponse,
+  PostResponse,
   CommentResponse,
   WebSocketJsonResponse,
 } from '../interfaces';
@@ -506,7 +506,7 @@ export class Search extends Component<any, SearchState> {
       }
       this.setState(this.state);
     } else if (res.op == UserOperation.CreatePostLike) {
-      let data = res.data as CreatePostLikeResponse;
+      let data = res.data as PostResponse;
       let found = this.state.searchResponse.posts.find(
         c => c.id == data.post.id
       );
index 4036f7e6fdd41a98a900248df85b30225694d186..98cdc7630e030e3a4b1d1c320892703ac3a4c2d0 100644 (file)
@@ -664,10 +664,6 @@ export interface CreatePostLikeForm {
   auth?: string;
 }
 
-export interface CreatePostLikeResponse {
-  post: Post;
-}
-
 export interface SiteForm {
   name: string;
   description?: string;
@@ -831,7 +827,7 @@ type ResponseType =
   | GetFollowedCommunitiesResponse
   | ListCommunitiesResponse
   | GetPostsResponse
-  | CreatePostLikeResponse
+  | PostResponse
   | GetRepliesResponse
   | GetUserMentionsResponse
   | ListCategoriesResponse