From 67c24645039712d283c471c11007641628722a0f Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Fri, 24 Feb 2023 14:43:23 +0000 Subject: [PATCH] move like logic --- .../PostsController/services/toogleLike.js | 40 +++++++++++-------- packages/server/src/models/post/index.js | 3 -- packages/server/src/models/postLike/index.js | 14 +++++++ 3 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 packages/server/src/models/postLike/index.js diff --git a/packages/server/src/controllers/PostsController/services/toogleLike.js b/packages/server/src/controllers/PostsController/services/toogleLike.js index 1ca6d3a1..ecb5ab18 100755 --- a/packages/server/src/controllers/PostsController/services/toogleLike.js +++ b/packages/server/src/controllers/PostsController/services/toogleLike.js @@ -1,31 +1,37 @@ -import { Post } from "../../../models" - -import modifyPostData from "./modifyPostData" +import { PostLike } from "@models" export default async (payload) => { let { post_id, user_id, to } = payload - let post = await Post.findById(post_id).catch(() => false) - - if (!post) { - throw new Error("Post not found") - } + let likeObj = await PostLike.findOne({ + post_id, + user_id, + }).catch(() => false) if (typeof to === "undefined") { - to = !post.likes.includes(user_id) + if (likeObj) { + to = false + } else { + to = true + } } if (to) { - post.likes.push(user_id) + likeObj = new PostLike({ + post_id, + user_id, + }) + + await likeObj.save() } else { - post.likes = post.likes.filter((id) => id !== user_id) + await PostLike.findByIdAndDelete(likeObj._id) } - post = await modifyPostData(post._id, { likes: post.likes }) + global.websocket_instance.io.emit(`post.${post_id}.likes.update`, { + to, + post_id, + user_id, + }) - global.websocket_instance.io.emit(`post.${to ? "like" : "unlike"}`, post) - global.websocket_instance.io.emit(`post.${to ? "like" : "unlike"}.${post.user_id}`, post) - global.websocket_instance.io.emit(`post.${to ? "like" : "unlike"}.${post_id}`, post) - - return post + return likeObj } \ No newline at end of file diff --git a/packages/server/src/models/post/index.js b/packages/server/src/models/post/index.js index 98aeb721..45ff832e 100755 --- a/packages/server/src/models/post/index.js +++ b/packages/server/src/models/post/index.js @@ -6,10 +6,7 @@ export default { timestamp: { type: String, required: true }, created_at: { type: Date, default: Date.now, required: true }, message: { type: String }, - likes: { type: Array, default: [] }, attachments: { type: Array, default: [] }, - type: { type: String, default: "text" }, - data: { type: Object, default: {} }, flags: { type: Array, default: [] }, } } \ No newline at end of file diff --git a/packages/server/src/models/postLike/index.js b/packages/server/src/models/postLike/index.js new file mode 100644 index 00000000..16c41044 --- /dev/null +++ b/packages/server/src/models/postLike/index.js @@ -0,0 +1,14 @@ +export default { + name: "PostLike", + collection: "post_likes", + schema: { + user_id: { + type: String, + required: true, + }, + post_id: { + type: String, + required: true, + } + } +} \ No newline at end of file