From 25dfbf47248cb4b33539559e449ec0debfc5b42f Mon Sep 17 00:00:00 2001 From: Sainan Date: Sat, 15 Mar 2025 03:21:40 -0700 Subject: [PATCH] feat: edit clan tax rate (#1183) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1183 --- src/controllers/api/tradingController.ts | 23 +++++++++++++++++++++++ src/models/guildModel.ts | 1 + src/routes/api.ts | 2 ++ src/services/guildService.ts | 1 + src/types/guildTypes.ts | 7 +++---- 5 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 src/controllers/api/tradingController.ts diff --git a/src/controllers/api/tradingController.ts b/src/controllers/api/tradingController.ts new file mode 100644 index 000000000..af6e94f9a --- /dev/null +++ b/src/controllers/api/tradingController.ts @@ -0,0 +1,23 @@ +import { getGuildForRequestEx, hasAccessToDojo, hasGuildPermission } from "@/src/services/guildService"; +import { getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { GuildPermission } from "@/src/types/guildTypes"; +import { RequestHandler } from "express"; + +export const tradingController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId, "GuildId LevelKeys"); + const guild = await getGuildForRequestEx(req, inventory); + const op = req.query.op as string; + if (op == "5") { + if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Treasurer))) { + res.status(400).send("-1").end(); + return; + } + guild.TradeTax = parseInt(req.query.tax as string); + await guild.save(); + res.send(guild.TradeTax).end(); + } else { + throw new Error(`unknown trading op: ${op}`); + } +}; diff --git a/src/models/guildModel.ts b/src/models/guildModel.ts index b8eb97afb..00c428ed9 100644 --- a/src/models/guildModel.ts +++ b/src/models/guildModel.ts @@ -142,6 +142,7 @@ const guildSchema = new Schema( MOTD: { type: String, default: "" }, LongMOTD: { type: longMOTDSchema, default: undefined }, Ranks: { type: [guildRankSchema], default: defaultRanks }, + TradeTax: { type: Number, default: 0 }, DojoComponents: { type: [dojoComponentSchema], default: [] }, DojoCapacity: { type: Number, default: 100 }, DojoEnergy: { type: Number, default: 5 }, diff --git a/src/routes/api.ts b/src/routes/api.ts index b2e27b530..5390d13af 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -102,6 +102,7 @@ import { surveysController } from "@/src/controllers/api/surveysController"; import { syndicateSacrificeController } from "@/src/controllers/api/syndicateSacrificeController"; import { syndicateStandingBonusController } from "@/src/controllers/api/syndicateStandingBonusController"; import { tauntHistoryController } from "@/src/controllers/api/tauntHistoryController"; +import { tradingController } from "@/src/controllers/api/tradingController"; import { trainingResultController } from "@/src/controllers/api/trainingResultController"; import { unlockShipFeatureController } from "@/src/controllers/api/unlockShipFeatureController"; import { updateAlignmentController } from "@/src/controllers/api/updateAlignmentController"; @@ -153,6 +154,7 @@ apiRouter.get("/setSupportedSyndicate.php", setSupportedSyndicateController); apiRouter.get("/startLibraryDailyTask.php", startLibraryDailyTaskController); apiRouter.get("/startLibraryPersonalTarget.php", startLibraryPersonalTargetController); apiRouter.get("/surveys.php", surveysController); +apiRouter.get("/trading.php", tradingController); apiRouter.get("/updateSession.php", updateSessionGetController); // post diff --git a/src/services/guildService.ts b/src/services/guildService.ts index 8a7e0220f..92f38e3e9 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -90,6 +90,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s LongMOTD: guild.LongMOTD, Members: members, Ranks: guild.Ranks, + TradeTax: guild.TradeTax, Tier: 1, Vault: getGuildVault(guild), Class: guild.Class, diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 811f18136..93e8ae641 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -8,10 +8,8 @@ export interface IGuildClient { MOTD: string; LongMOTD?: ILongMOTD; Members: IGuildMemberClient[]; - Ranks: { - Name: string; - Permissions: number; - }[]; + Ranks: IGuildRank[]; + TradeTax: number; Tier: number; Vault: IGuildVault; Class: number; @@ -27,6 +25,7 @@ export interface IGuildDatabase { MOTD: string; LongMOTD?: ILongMOTD; Ranks: IGuildRank[]; + TradeTax: number; DojoComponents: IDojoComponentDatabase[]; DojoCapacity: number;