From 1b19439b4dd7615f4c8c36b8a56d2e0b68655ef3 Mon Sep 17 00:00:00 2001 From: srgooglo Date: Mon, 14 Nov 2022 01:29:56 +0000 Subject: [PATCH] use `fullfillPostsData` --- .../FeedController/methods/getPosts.js | 34 +++++++++++++++ .../PostsController/methods/getPostData.js | 41 +++---------------- 2 files changed, 39 insertions(+), 36 deletions(-) create mode 100644 packages/server/src/controllers/FeedController/methods/getPosts.js diff --git a/packages/server/src/controllers/FeedController/methods/getPosts.js b/packages/server/src/controllers/FeedController/methods/getPosts.js new file mode 100644 index 00000000..c8087d9d --- /dev/null +++ b/packages/server/src/controllers/FeedController/methods/getPosts.js @@ -0,0 +1,34 @@ +import { Post, UserFollow } from "../../../models" + +import fullfillPostsData from "../../../utils/fullfillPostsData" + +export default async (payload) => { + const { + for_user_id, + limit = 20, + skip = 0, + } = payload + + // get post from users that the user follows + const followingUsers = await UserFollow.find({ + user_id: for_user_id + }) + + const followingUserIds = followingUsers.map((followingUser) => followingUser.to) + + let posts = await Post.find({ + user_id: { $in: followingUserIds } + }) + .sort({ created_at: -1 }) + .limit(limit) + .skip(skip) + + // fullfill data + posts = await fullfillPostsData({ + posts, + for_user_id, + skip, + }) + + return posts +} \ No newline at end of file diff --git a/packages/server/src/controllers/PostsController/methods/getPostData.js b/packages/server/src/controllers/PostsController/methods/getPostData.js index cd9608c5..912836ff 100755 --- a/packages/server/src/controllers/PostsController/methods/getPostData.js +++ b/packages/server/src/controllers/PostsController/methods/getPostData.js @@ -1,4 +1,5 @@ import { Post, User, Comment, SavedPost } from "../../../models" +import fullfillPostsData from "../../../utils/fullfillPostsData" export default async (payload) => { let { @@ -55,44 +56,12 @@ export default async (payload) => { } // fullfill data - posts = posts.map(async (post, index) => { - post = post.toObject() - - post.key = Number(skip) + Number(index) - - let user = await User.findById(post.user_id).catch(() => false) - - if (!user) { - user = { - username: "Deleted user", - } - } - - let comments = await Comment.find({ parent_id: post._id.toString() }) - .select("_id") - .catch(() => false) - - if (!comments) { - comments = [] - } - - post.comments = comments - - if (for_user_id) { - post.isLiked = post.likes.includes(for_user_id) - post.isSaved = savedPostsIds.includes(post._id.toString()) - } - - return { - key: Number(skip) + Number(index), - ...post, - comments: comments.map((comment) => comment._id.toString()), - user, - } + posts = await fullfillPostsData({ + posts, + for_user_id, + skip, }) - posts = await Promise.all(posts) - // if post_id is specified, return only one post if (post_id) { return posts[0]