feat: dojo component settings (#1509)

Reviewed-on: OpenWF/SpaceNinjaServer#1509
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
Sainan 2025-04-08 03:06:06 -07:00 committed by Sainan
parent dcdeb0cd34
commit 7f69667171
5 changed files with 31 additions and 1 deletions

View File

@ -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<ISetDojoComponentSettingsRequest>(String(req.body));
component.Settings = data.Settings;
await guild.save();
res.json(await getDojoClient(guild, 0, component._id));
};
interface ISetDojoComponentSettingsRequest {
Settings: string;
}

View File

@ -63,6 +63,7 @@ const dojoComponentSchema = new Schema<IDojoComponentDatabase>({
Colors: { type: [Number], default: undefined },
PendingLights: { type: [Number], default: undefined },
Lights: { type: [Number], default: undefined },
Settings: String,
Leaderboard: { type: [dojoLeaderboardEntrySchema], default: undefined }
});

View File

@ -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);

View File

@ -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);

View File

@ -181,6 +181,7 @@ export interface IDojoComponentClient {
Colors?: number[];
PendingLights?: number[];
Lights?: number[];
Settings?: string;
}
export interface IDojoComponentDatabase