From 7f69667171e44319124ae03b5bb037e02c1606aa Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Tue, 8 Apr 2025 03:06:06 -0700 Subject: [PATCH] feat: dojo component settings (#1509) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1509 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- .../api/setDojoComponentSettingsController.ts | 25 +++++++++++++++++++ src/models/guildModel.ts | 1 + src/routes/api.ts | 2 ++ src/services/guildService.ts | 3 ++- src/types/guildTypes.ts | 1 + 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/controllers/api/setDojoComponentSettingsController.ts diff --git a/src/controllers/api/setDojoComponentSettingsController.ts b/src/controllers/api/setDojoComponentSettingsController.ts new file mode 100644 index 00000000..e7118415 --- /dev/null +++ b/src/controllers/api/setDojoComponentSettingsController.ts @@ -0,0 +1,25 @@ +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { getDojoClient, 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 setDojoComponentSettingsController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId, "GuildId LevelKeys"); + const guild = await getGuildForRequestEx(req, inventory); + if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Decorator))) { + res.json({ DojoRequestStatus: -1 }); + return; + } + const component = guild.DojoComponents.id(req.query.componentId)!; + const data = getJSONfromString(String(req.body)); + component.Settings = data.Settings; + await guild.save(); + res.json(await getDojoClient(guild, 0, component._id)); +}; + +interface ISetDojoComponentSettingsRequest { + Settings: string; +} diff --git a/src/models/guildModel.ts b/src/models/guildModel.ts index df2f860a..2d757039 100644 --- a/src/models/guildModel.ts +++ b/src/models/guildModel.ts @@ -63,6 +63,7 @@ const dojoComponentSchema = new Schema({ Colors: { type: [Number], default: undefined }, PendingLights: { type: [Number], default: undefined }, Lights: { type: [Number], default: undefined }, + Settings: String, Leaderboard: { type: [dojoLeaderboardEntrySchema], default: undefined } }); diff --git a/src/routes/api.ts b/src/routes/api.ts index 7970c29d..d8be0cb3 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -107,6 +107,7 @@ import { setAllianceGuildPermissionsController } from "@/src/controllers/api/set import { setBootLocationController } from "@/src/controllers/api/setBootLocationController"; import { setDojoComponentColorsController } from "@/src/controllers/api/setDojoComponentColorsController"; import { setDojoComponentMessageController } from "@/src/controllers/api/setDojoComponentMessageController"; +import { setDojoComponentSettingsController } from "@/src/controllers/api/setDojoComponentSettingsController"; import { setEquippedInstrumentController } from "@/src/controllers/api/setEquippedInstrumentController"; import { setGuildMotdController } from "@/src/controllers/api/setGuildMotdController"; import { setPlacedDecoInfoController } from "@/src/controllers/api/setPlacedDecoInfoController"; @@ -264,6 +265,7 @@ apiRouter.post("/saveVaultAutoContribute.php", saveVaultAutoContributeController apiRouter.post("/sell.php", sellController); apiRouter.post("/setDojoComponentColors.php", setDojoComponentColorsController); apiRouter.post("/setDojoComponentMessage.php", setDojoComponentMessageController); +apiRouter.post("/setDojoComponentSettings.php", setDojoComponentSettingsController); apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController); apiRouter.post("/setGuildMotd.php", setGuildMotdController); apiRouter.post("/setPlacedDecoInfo.php", setPlacedDecoInfoController); diff --git a/src/services/guildService.ts b/src/services/guildService.ts index 32ff25a9..f8e33a5e 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -151,7 +151,8 @@ export const getDojoClient = async ( ppf: dojoComponent.ppf, Name: dojoComponent.Name, Message: dojoComponent.Message, - DecoCapacity: dojoComponent.DecoCapacity ?? 600 + DecoCapacity: dojoComponent.DecoCapacity ?? 600, + Settings: dojoComponent.Settings }; if (dojoComponent.pi) { clientComponent.pi = toOid(dojoComponent.pi); diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 7746f2bb..2502b57e 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -181,6 +181,7 @@ export interface IDojoComponentClient { Colors?: number[]; PendingLights?: number[]; Lights?: number[]; + Settings?: string; } export interface IDojoComponentDatabase