format & rewrite

This commit is contained in:
SrGooglo 2025-04-10 14:33:36 +00:00
parent 525aa9c066
commit ec8d0a068d
5 changed files with 131 additions and 153 deletions

View File

@ -1,6 +1,5 @@
import { User, UserFollow } from "@db_models" import { User, UserFollow } from "@db_models"
// REWRITE MEE!!!
export default async (payload = {}) => { export default async (payload = {}) => {
const { user_id, from_user_id, basic } = payload const { user_id, from_user_id, basic } = payload
@ -8,64 +7,45 @@ export default async (payload = {}) => {
throw new OperationError(400, "Missing user_id") throw new OperationError(400, "Missing user_id")
} }
let data = null const isMultipleUsers = Array.isArray(user_id)
if (Array.isArray(user_id)) { let usersData = null
data = await User.find({
_id: {
$in: user_id,
},
}).catch((err) => {
return false
})
data = data.map((user) => { if (isMultipleUsers) {
user = user.toObject() usersData = await User.find({ _id: { $in: user_id } })
return user
})
if (from_user_id && !basic) { if (!usersData || !usersData.length) {
const following = await UserFollow.find({ return []
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
}
})
} }
return data usersData = usersData.map((user) => user.toObject())
} else { } else {
data = await User.findOne({ const userData = await User.findOne({ _id: user_id })
_id: user_id,
}).catch((err) => {
return false
})
if (!data) { if (!userData) {
throw new OperationError(404, "User not found") throw new OperationError(404, "User not found")
} }
data = data.toObject() usersData = [userData.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
} }
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]
} }

View File

@ -1,35 +1,35 @@
import { User, UserFollow } from "@db_models" import { User, UserFollow } from "@db_models"
export default async (payload = {}) => { 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) { if (!user_id) {
throw new OperationError(400, "Missing user_id") throw new OperationError(400, "Missing user_id")
} }
if (data) { if (data) {
let followers = await UserFollow.find({ let followers = await UserFollow.find({
to: user_id to: user_id,
}) })
.limit(limit) .limit(limit)
.skip(offset) .skip(offset)
const followersData = await User.find({ const followersData = await User.find({
_id: { _id: {
$in: followers.map((follow) => { $in: followers.map((follow) => {
return follow.user_id return follow.user_id
}) }),
} },
}) })
return followersData return followersData
} else { } else {
const count = await UserFollow.countDocuments({ const count = await UserFollow.countDocuments({
to: user_id to: user_id,
}) })
return { return {
count count,
} }
} }
} }

View File

@ -1,23 +1,23 @@
import { User } from "@db_models" import { User } from "@db_models"
export default async (payload = {}) => { export default async (payload = {}) => {
const { username } = payload const { username } = payload
if (!username) { if (!username) {
throw new OperationError(400, "Missing username") throw new OperationError(400, "Missing username")
} }
let user = await User.findOne({ let user = await User.findOne({
username username,
}).catch((err) => { }).catch((err) => {
return false return false
}) })
if (!user) { if (!user) {
throw new OperationError(404, "User not found") throw new OperationError(404, "User not found")
} }
return { return {
user_id: user._id.toString() user_id: user._id.toString(),
} }
} }

View File

@ -1,51 +1,51 @@
import { User, UserFollow } from "@db_models" import { User, UserFollow } from "@db_models"
export default async (payload = {}) => { 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") { if (typeof from_user_id === "undefined") {
throw new OperationError(400, "[from_user_id] not provided") throw new OperationError(400, "[from_user_id] not provided")
} }
if (typeof user_id === "undefined") { if (typeof user_id === "undefined") {
throw new OperationError(400, "[user_id] not provided") throw new OperationError(400, "[user_id] not provided")
} }
const user = await User.findById(user_id).catch((err) => { const user = await User.findById(user_id).catch((err) => {
return false return false
}) })
if (!user) { if (!user) {
throw new OperationError(404, "User not found") throw new OperationError(404, "User not found")
} }
let followObj = await UserFollow.findOne({ let followObj = await UserFollow.findOne({
user_id: from_user_id, user_id: from_user_id,
to: user_id, to: user_id,
}).catch((err) => { }).catch((err) => {
return false return false
}) })
if (typeof to === "undefined") { if (typeof to === "undefined") {
if (followObj) { if (followObj) {
to = false to = false
} else { } else {
to = true to = true
} }
} }
if (to === true) { if (to === true) {
followObj = new UserFollow({ followObj = new UserFollow({
user_id: from_user_id, user_id: from_user_id,
to: user_id, to: user_id,
}) })
await followObj.save() await followObj.save()
} else { } else {
await UserFollow.findByIdAndDelete(followObj._id) await UserFollow.findByIdAndDelete(followObj._id)
} }
return { return {
following: to, following: to,
count: await UserFollow.countDocuments({ to: user_id }), count: await UserFollow.countDocuments({ to: user_id }),
} }
} }

View File

@ -1,31 +1,29 @@
import { User } from "@db_models" import { User } from "@db_models"
export default async (user_id, update) => { export default async (user_id, update) => {
if (typeof user_id === "undefined") { if (typeof user_id === "undefined") {
throw new Error("No user_id provided") throw new Error("No user_id provided")
} }
if (typeof update === "undefined") { if (typeof update === "undefined") {
throw new Error("No update provided") throw new Error("No update provided")
} }
let user = await User.findById(user_id) let user = await User.findById(user_id)
if (!user) { if (!user) {
throw new OperationError(404, "User not found") throw new OperationError(404, "User not found")
} }
const updateKeys = Object.keys(update) const updateKeys = Object.keys(update)
updateKeys.forEach((key) => { updateKeys.forEach((key) => {
user[key] = update[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
return user
} }