mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
60 lines
1.8 KiB
JavaScript
Executable File
60 lines
1.8 KiB
JavaScript
Executable File
import { Schematized } from "@lib"
|
|
import { User, UserFollow } from "@db_models"
|
|
|
|
import followUser from "../services/followUser"
|
|
import unfollowUser from "../services/unfollowUser"
|
|
|
|
export default {
|
|
method: "POST",
|
|
route: "/user/toggle",
|
|
middlewares: ["withAuthentication"],
|
|
fn: Schematized({
|
|
select: ["user_id", "username"],
|
|
}, async (req, res) => {
|
|
const selfUserId = req.user._id.toString()
|
|
|
|
let targetUserId = null
|
|
let result = null
|
|
|
|
if (typeof req.selection.user_id === "undefined" && typeof req.selection.username === "undefined") {
|
|
return res.status(400).json({ message: "No user_id or username provided" })
|
|
}
|
|
|
|
if (typeof req.selection.user_id !== "undefined") {
|
|
targetUserId = req.selection.user_id
|
|
} else {
|
|
const user = await User.findOne({ username: req.selection.username })
|
|
|
|
if (!user) {
|
|
return res.status(404).json({ message: "User not found" })
|
|
}
|
|
|
|
targetUserId = user._id.toString()
|
|
}
|
|
|
|
// check if already following
|
|
const isFollowed = await UserFollow.findOne({
|
|
user_id: selfUserId,
|
|
to: targetUserId,
|
|
})
|
|
|
|
// if already following, delete
|
|
if (isFollowed) {
|
|
result = await unfollowUser({
|
|
user_id: selfUserId,
|
|
to: targetUserId,
|
|
}).catch((error) => {
|
|
return res.status(500).json({ message: error.message })
|
|
})
|
|
} else {
|
|
result = await followUser({
|
|
user_id: selfUserId,
|
|
to: targetUserId,
|
|
}).catch((error) => {
|
|
return res.status(500).json({ message: error.message })
|
|
})
|
|
}
|
|
|
|
return res.json(result)
|
|
})
|
|
} |