From a730dc9974c46b0032c352164b17b78f1d80a6a0 Mon Sep 17 00:00:00 2001 From: chnxianyi Date: Wed, 17 Sep 2025 13:49:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=E5=90=8D&?= =?UTF-8?q?=E5=A4=9A=E4=BB=BB=E5=8A=A1=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/tasks.tool.js | 15 ++++++++------ users/users.controller.js | 42 +++++++++++++++++++++++++++++++++++++++ users/users.routes.js | 7 +++++++ 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/tasks/tasks.tool.js b/tasks/tasks.tool.js index e56f432..05d0ae5 100644 --- a/tasks/tasks.tool.js +++ b/tasks/tasks.tool.js @@ -90,20 +90,23 @@ exports.giveTaskReward = async (userId, taskConfig) => { for (let i = 0; i < taskConfig.rewardTypes.length; i++) { const rewardType = taskConfig.rewardTypes[i]; const rewardNum = taskConfig.rewardNums[i]; - + const user = await UserModel.getById(userId); switch (rewardType) { case TASK_REWARD_TYPES.COINS: - // Here we would call the rewards system to give coins to the user - const user = await UserModel.getById(userId); user.coins += rewardNum; - - await user.save(); + break; + case TASK_REWARD_TYPES.CRYSTALS: + user.crystals += rewardNum; + break; + case TASK_REWARD_TYPES.CARD_FRAGMENTS: + user.cardfragments += rewardNum; break; default: console.log(`Unknown reward type: ${rewardType}`); } + } - + await user.save(); return true; }; diff --git a/users/users.controller.js b/users/users.controller.js index bff93b0..1ea94e7 100644 --- a/users/users.controller.js +++ b/users/users.controller.js @@ -211,6 +211,48 @@ exports.EditEmail = async(req, res) => { return res.status(200).send(result.deleteSecrets()); }; +exports.EditUsername = async(req, res) => { + + var userId = req.jwt.userId; + var username = req.body.username; + + if(!userId || typeof userId !== "string") + return res.status(400).send({error: "Invalid parameters"}); + + if(!username || !Validator.validateUsername(username)) + return res.status(400).send({error: "Invalid email"}); + + var user = await UserModel.getById(userId); + if(!user) + return res.status(404).send({error: "User not found: " + userId}); + + if(username == user.username) + return res.status(400).send({error: "Username unchanged"}); + + //Find username + var foundUserUsername = await UserModel.getByUsername(username); + if(foundUserUsername) + return res.status(403).send({error: "Username already exists"}); + + var prev_username = user.username; + var userData = {}; + userData.username = username; + userData.validation_level = 0; + userData.email_confirm_key = UserTool.generateID(20); + + //Update user + var result = await UserModel.update(user, userData); + if(!result) + return res.status(400).send({error: "Error updating user username: " + userId}); + + // Activity Log ------------- + var activityData = {prev_username: prev_username, new_username: username }; + var a = await Activity.LogActivity("edit_username", req.jwt.username, {activityData}); + if (!a) return res.status(500).send({ error: "Failed to log activity!!" }); + + return res.status(200).send(result.deleteSecrets()); +}; + exports.EditPassword = async(req, res) => { var userId = req.jwt.userId; diff --git a/users/users.routes.js b/users/users.routes.js index 37bc0e6..611eef1 100644 --- a/users/users.routes.js +++ b/users/users.routes.js @@ -51,6 +51,13 @@ exports.route = function (app) { UsersController.EditEmail, ]); + //Body: username + app.post("/users/username/edit", app.auth_limiter, [ + AuthTool.isValidJWT, + AuthTool.isPermissionLevel(USER), + UsersController.EditUsername, + ]); + //Body: password_previous, password_new app.post("/users/password/edit", app.auth_limiter, [ AuthTool.isValidJWT,