diff --git a/packages/server/services/users/classes/users/method/data.js b/packages/server/services/users/classes/users/method/data.js index baabbbd6..ef62902a 100644 --- a/packages/server/services/users/classes/users/method/data.js +++ b/packages/server/services/users/classes/users/method/data.js @@ -1,6 +1,5 @@ import { User, UserFollow } from "@db_models" -// REWRITE MEE!!! export default async (payload = {}) => { const { user_id, from_user_id, basic } = payload @@ -8,64 +7,45 @@ export default async (payload = {}) => { throw new OperationError(400, "Missing user_id") } - let data = null + const isMultipleUsers = Array.isArray(user_id) - if (Array.isArray(user_id)) { - data = await User.find({ - _id: { - $in: user_id, - }, - }).catch((err) => { - return false - }) + let usersData = null - data = data.map((user) => { - user = user.toObject() - return user - }) + if (isMultipleUsers) { + usersData = await User.find({ _id: { $in: user_id } }) - if (from_user_id && !basic) { - const following = await UserFollow.find({ - to: { - $in: ids, - }, - user_id: from_user_id, - }).catch(() => false) - - following.forEach((follow) => { - const userIndex = data.findIndex((user) => { - return user._id === follow.to - }) - - if (userIndex > -1) { - data[userIndex].following = true - } - }) + if (!usersData || !usersData.length) { + return [] } - return data + usersData = usersData.map((user) => user.toObject()) } else { - data = await User.findOne({ - _id: user_id, - }).catch((err) => { - return false - }) + const userData = await User.findOne({ _id: user_id }) - if (!data) { + if (!userData) { throw new OperationError(404, "User not found") } - data = data.toObject() - - if (from_user_id && !basic) { - const isFollowed = await UserFollow.findOne({ - user_id: from_user_id, - to: user_id, - }).catch(() => false) - - data.following = !!isFollowed - } - - return data + usersData = [userData.toObject()] } + + if (from_user_id && !basic) { + const targetUserIds = usersData.map((user) => user._id) + + const followingData = await UserFollow.find({ + user_id: from_user_id, + to: { $in: targetUserIds }, + }) + + const followedUserIds = new Set( + followingData.map((follow) => follow.to.toString()), + ) + + usersData = usersData.map((user) => ({ + ...user, + following: followedUserIds.has(user._id.toString()), + })) + } + + return isMultipleUsers ? usersData : usersData[0] } diff --git a/packages/server/services/users/classes/users/method/getFollowers.js b/packages/server/services/users/classes/users/method/getFollowers.js index 361e5574..2310a154 100644 --- a/packages/server/services/users/classes/users/method/getFollowers.js +++ b/packages/server/services/users/classes/users/method/getFollowers.js @@ -1,35 +1,35 @@ import { User, UserFollow } from "@db_models" export default async (payload = {}) => { - const { user_id, data = false, limit = 50, offset = 0 } = payload + const { user_id, data = false, limit = 50, offset = 0 } = payload - if (!user_id) { - throw new OperationError(400, "Missing user_id") - } + if (!user_id) { + throw new OperationError(400, "Missing user_id") + } - if (data) { - let followers = await UserFollow.find({ - to: user_id - }) - .limit(limit) - .skip(offset) + if (data) { + let followers = await UserFollow.find({ + to: user_id, + }) + .limit(limit) + .skip(offset) - const followersData = await User.find({ - _id: { - $in: followers.map((follow) => { - return follow.user_id - }) - } - }) + const followersData = await User.find({ + _id: { + $in: followers.map((follow) => { + return follow.user_id + }), + }, + }) - return followersData - } else { - const count = await UserFollow.countDocuments({ - to: user_id - }) + return followersData + } else { + const count = await UserFollow.countDocuments({ + to: user_id, + }) - return { - count - } - } -} \ No newline at end of file + return { + count, + } + } +} diff --git a/packages/server/services/users/classes/users/method/resolveUserId.js b/packages/server/services/users/classes/users/method/resolveUserId.js index ff9f7fa5..ee974c6f 100644 --- a/packages/server/services/users/classes/users/method/resolveUserId.js +++ b/packages/server/services/users/classes/users/method/resolveUserId.js @@ -1,23 +1,23 @@ import { User } from "@db_models" export default async (payload = {}) => { - const { username } = payload + const { username } = payload - if (!username) { - throw new OperationError(400, "Missing username") - } + if (!username) { + throw new OperationError(400, "Missing username") + } - let user = await User.findOne({ - username - }).catch((err) => { - return false - }) + let user = await User.findOne({ + username, + }).catch((err) => { + return false + }) - if (!user) { - throw new OperationError(404, "User not found") - } + if (!user) { + throw new OperationError(404, "User not found") + } - return { - user_id: user._id.toString() - } -} \ No newline at end of file + return { + user_id: user._id.toString(), + } +} diff --git a/packages/server/services/users/classes/users/method/toggleFollow.js b/packages/server/services/users/classes/users/method/toggleFollow.js index 5d916d4a..870e0314 100644 --- a/packages/server/services/users/classes/users/method/toggleFollow.js +++ b/packages/server/services/users/classes/users/method/toggleFollow.js @@ -1,51 +1,51 @@ import { User, UserFollow } from "@db_models" export default async (payload = {}) => { - let { user_id, from_user_id, to } = payload + let { user_id, from_user_id, to } = payload - if (typeof from_user_id === "undefined") { - throw new OperationError(400, "[from_user_id] not provided") - } - if (typeof user_id === "undefined") { - throw new OperationError(400, "[user_id] not provided") - } + if (typeof from_user_id === "undefined") { + throw new OperationError(400, "[from_user_id] not provided") + } + if (typeof user_id === "undefined") { + throw new OperationError(400, "[user_id] not provided") + } - const user = await User.findById(user_id).catch((err) => { - return false - }) + const user = await User.findById(user_id).catch((err) => { + return false + }) - if (!user) { - throw new OperationError(404, "User not found") - } + if (!user) { + throw new OperationError(404, "User not found") + } - let followObj = await UserFollow.findOne({ - user_id: from_user_id, - to: user_id, - }).catch((err) => { - return false - }) + let followObj = await UserFollow.findOne({ + user_id: from_user_id, + to: user_id, + }).catch((err) => { + return false + }) - if (typeof to === "undefined") { - if (followObj) { - to = false - } else { - to = true - } - } + if (typeof to === "undefined") { + if (followObj) { + to = false + } else { + to = true + } + } - if (to === true) { - followObj = new UserFollow({ - user_id: from_user_id, - to: user_id, - }) + if (to === true) { + followObj = new UserFollow({ + user_id: from_user_id, + to: user_id, + }) - await followObj.save() - } else { - await UserFollow.findByIdAndDelete(followObj._id) - } + await followObj.save() + } else { + await UserFollow.findByIdAndDelete(followObj._id) + } - return { - following: to, - count: await UserFollow.countDocuments({ to: user_id }), - } -} \ No newline at end of file + return { + following: to, + count: await UserFollow.countDocuments({ to: user_id }), + } +} diff --git a/packages/server/services/users/classes/users/method/update.js b/packages/server/services/users/classes/users/method/update.js index 370cb48e..17a2da4c 100644 --- a/packages/server/services/users/classes/users/method/update.js +++ b/packages/server/services/users/classes/users/method/update.js @@ -1,31 +1,29 @@ import { User } from "@db_models" export default async (user_id, update) => { - if (typeof user_id === "undefined") { - throw new Error("No user_id provided") - } + if (typeof user_id === "undefined") { + throw new Error("No user_id provided") + } - if (typeof update === "undefined") { - throw new Error("No update provided") - } + if (typeof update === "undefined") { + throw new Error("No update provided") + } - let user = await User.findById(user_id) + let user = await User.findById(user_id) - if (!user) { - throw new OperationError(404, "User not found") - } + if (!user) { + throw new OperationError(404, "User not found") + } - const updateKeys = Object.keys(update) + const updateKeys = Object.keys(update) - updateKeys.forEach((key) => { - user[key] = update[key] - }) + updateKeys.forEach((key) => { + user[key] = update[key] + }) - await user.save() + await user.save() - user = user.toObject() + user = user.toObject() - //global.websocket.io.of("/").emit(`user.update.${update}`, user) - - return user -} \ No newline at end of file + return user +}