This commit is contained in:
yaoyanwei
2025-08-04 16:25:38 +08:00
parent 8d542ea201
commit 4b2bb35c20
46 changed files with 5128 additions and 0 deletions

View File

@@ -0,0 +1,135 @@
const UserModel = require("./users.model");
const Activity = require("../activity/activity.model");
const UserTool = require('./users.tool');
const config = require('../config.js');
exports.AddFriend = async (req, res) => {
const userId = req.jwt.userId;
const username = req.body.username;
//Validate params
if (!username || !userId) {
return res.status(400).send({ error: "Invalid parameters" });
}
//Get the user
const user = await UserModel.getById(userId);
if (!user)
return res.status(404).send({ error: "Can't find user" });
const friend = await UserModel.getByUsername(username);
if (!friend)
return res.status(404).send({ error: "Can't find friend" });
if(user.id == friend.id)
return res.status(400).send({ error: "Can't add yourself" });
//Add Friend
if(!user.friends.includes(friend.username))
user.friends.push(friend.username);
//Add request other friend
if(!friend.friends.includes(user.username) && !friend.friends_requests.includes(user.username))
friend.friends_requests.push(user.username)
//Remove self request
if(user.friends_requests.includes(friend.username))
user.friends_requests.remove(friend.username);
//Update the user array
var updatedUser = await UserModel.save(user, ["friends", "friends_requests"]);
if (!updatedUser) return res.status(400).send({ error: "Error updating user" });
//Update the other user
var updatedFriend = await UserModel.save(friend, ["friends_requests"]);
if (!updatedFriend) return res.status(400).send({ error: "Error updating user" });
// -------------
return res.status(200).send(updatedUser.deleteSecrets());
};
exports.RemoveFriend = async(req, res) => {
const userId = req.jwt.userId;
const username = req.body.username;
//Validate params
if (!username || !userId) {
return res.status(400).send({ error: "Invalid parameters" });
}
//Get the user
const user = await UserModel.getById(userId);
if (!user)
return res.status(404).send({ error: "Can't find user" });
const friend = await UserModel.getByUsername(username);
if (!friend)
return res.status(404).send({ error: "Can't find friend" });
if(user.friends.includes(friend.username))
user.friends.remove(friend.username);
if(user.friends_requests.includes(friend.username))
user.friends_requests.remove(friend.username);
if(friend.friends_requests.includes(user.username))
friend.friends_requests.remove(user.username)
//Update the user array
var updatedUser = await UserModel.save(user, ["friends", "friends_requests"]);
if (!updatedUser) return res.status(400).send({ error: "Error updating user" });
var updatedFriend = await UserModel.save(friend, ["friends_requests"]);
if (!updatedFriend) return res.status(400).send({ error: "Error updating user" });
// -------------
return res.status(200).send(updatedUser.deleteSecrets());
};
exports.ListFriends = async(req, res) =>
{
const userId = req.jwt.userId;
//Validate params
if (!userId) {
return res.status(400).send({ error: "Invalid parameters" });
}
//Get the user
const user = await UserModel.getById(userId);
if (!user)
return res.status(404).send({ error: "Can't find user" });
var friends_users = user.friends || [];
var requests_users = user.friends_requests || [];
const friends = await UserModel.getUsernameList(friends_users);
if (!friends)
return res.status(404).send({ error: "Can't find user friends" });
const requests = await UserModel.getUsernameList(requests_users);
if (!requests)
return res.status(404).send({ error: "Can't find user friends" });
//Reduce visible fields
for(var i=0; i<friends.length; i++)
{
friends[i] = {
username: friends[i].username,
avatar: friends[i].avatar,
last_online_time: friends[i].last_online_time,
}
}
for(var i=0; i<requests.length; i++)
{
requests[i] = {
username: requests[i].username,
avatar: requests[i].avatar,
last_online_time: requests[i].last_online_time,
}
}
return res.status(200).send({username: user.username, friends: friends, friends_requests: requests, server_time: new Date()});
}