From 381bae77ab7ed8ae8bf52383bf2646738072da45 Mon Sep 17 00:00:00 2001 From: Sainan Date: Wed, 12 Mar 2025 15:07:15 +0100 Subject: [PATCH] feat: promote & demote clan members --- .../api/changeGuildRankController.ts | 28 +++++++++++++++++++ src/routes/api.ts | 2 ++ 2 files changed, 30 insertions(+) create mode 100644 src/controllers/api/changeGuildRankController.ts diff --git a/src/controllers/api/changeGuildRankController.ts b/src/controllers/api/changeGuildRankController.ts new file mode 100644 index 00000000..3293d251 --- /dev/null +++ b/src/controllers/api/changeGuildRankController.ts @@ -0,0 +1,28 @@ +import { GuildMember } from "@/src/models/guildModel"; +import { RequestHandler } from "express"; + +export const changeGuildRankController: RequestHandler = async (req, res) => { + // TODO: Verify permissions + const guildMember = (await GuildMember.findOne({ + guildId: req.query.guildId as string, + accountId: req.query.targetId as string + }))!; + guildMember.rank = parseInt(req.query.rankChange as string); + await guildMember.save(); + + if (guildMember.rank == 0) { + // If we just promoted someone else to Founding Warlord, we need to demote ourselves to Warlord. + await GuildMember.findOneAndUpdate( + { + guildId: req.query.guildId as string, + accountId: req.query.accountId as string + }, + { rank: 1 } + ); + } + + res.json({ + _id: req.query.targetId as string, + Rank: guildMember.rank + }); +}; diff --git a/src/routes/api.ts b/src/routes/api.ts index 75ddf345..c2cf107f 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -10,6 +10,7 @@ import { archonFusionController } from "@/src/controllers/api/archonFusionContro import { artifactsController } from "@/src/controllers/api/artifactsController"; import { artifactTransmutationController } from "@/src/controllers/api/artifactTransmutationController"; import { changeDojoRootController } from "@/src/controllers/api/changeDojoRootController"; +import { changeGuildRankController } from "@/src/controllers/api/changeGuildRankController"; import { checkDailyMissionBonusController } from "@/src/controllers/api/checkDailyMissionBonusController"; import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompletedRecipeController"; import { claimLibraryDailyTaskRewardController } from "@/src/controllers/api/claimLibraryDailyTaskRewardController"; @@ -115,6 +116,7 @@ const apiRouter = express.Router(); // get apiRouter.get("/abandonLibraryDailyTask.php", abandonLibraryDailyTaskController); apiRouter.get("/abortDojoComponentDestruction.php", abortDojoComponentDestructionController); +apiRouter.get("/changeGuildRank.php", changeGuildRankController); apiRouter.get("/checkDailyMissionBonus.php", checkDailyMissionBonusController); apiRouter.get("/claimLibraryDailyTaskReward.php", claimLibraryDailyTaskRewardController); apiRouter.get("/confirmGuildInvitation.php", confirmGuildInvitationController);