From efa9900dd3f4965ec4050ab27ac803a84d9b7773 Mon Sep 17 00:00:00 2001 From: Sainan Date: Wed, 5 Mar 2025 05:19:03 +0100 Subject: [PATCH] feat: track DecoCapacity --- .../api/abortDojoComponentController.ts | 8 ++++---- src/controllers/api/destroyDojoDecoController.ts | 8 ++++---- .../api/placeDecoInComponentController.ts | 5 +++++ src/services/guildService.ts | 14 +++++++++++++- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/controllers/api/abortDojoComponentController.ts b/src/controllers/api/abortDojoComponentController.ts index dd27102c..76db786a 100644 --- a/src/controllers/api/abortDojoComponentController.ts +++ b/src/controllers/api/abortDojoComponentController.ts @@ -1,4 +1,4 @@ -import { getDojoClient, getGuildForRequestEx, removeDojoRoom } from "@/src/services/guildService"; +import { getDojoClient, getGuildForRequestEx, removeDojoDeco, removeDojoRoom } from "@/src/services/guildService"; import { getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { RequestHandler } from "express"; @@ -8,14 +8,14 @@ export const abortDojoComponentController: RequestHandler = async (req, res) => const inventory = await getInventory(accountId); const guild = await getGuildForRequestEx(req, inventory); const request = JSON.parse(String(req.body)) as IAbortDojoComponentRequest; + // TODO: Move already-contributed credits & items to the clan vault if (request.DecoId) { - const component = guild.DojoComponents.id(request.ComponentId)!; - const decoIndex = component.Decos!.findIndex(x => x._id.equals(request.DecoId)); - component.Decos!.splice(decoIndex, 1); + removeDojoDeco(guild, request.ComponentId, request.DecoId); } else { removeDojoRoom(guild, request.ComponentId); } + await guild.save(); res.json(getDojoClient(guild, 0)); }; diff --git a/src/controllers/api/destroyDojoDecoController.ts b/src/controllers/api/destroyDojoDecoController.ts index ca329615..ec1b45ff 100644 --- a/src/controllers/api/destroyDojoDecoController.ts +++ b/src/controllers/api/destroyDojoDecoController.ts @@ -1,13 +1,13 @@ -import { getDojoClient, getGuildForRequest } from "@/src/services/guildService"; +import { getDojoClient, getGuildForRequest, removeDojoDeco } from "@/src/services/guildService"; import { RequestHandler } from "express"; export const destroyDojoDecoController: RequestHandler = async (req, res) => { const guild = await getGuildForRequest(req); const request = JSON.parse(String(req.body)) as IDestroyDojoDecoRequest; - const component = guild.DojoComponents.id(request.ComponentId)!; - const decoIndex = component.Decos!.findIndex(x => x._id.equals(request.DecoId)); - component.Decos!.splice(decoIndex, 1); + + removeDojoDeco(guild, request.ComponentId, request.DecoId); // TODO: The client says this is supposed to refund the resources to the clan vault, so we should probably do that. + await guild.save(); res.json(getDojoClient(guild, 0)); }; diff --git a/src/controllers/api/placeDecoInComponentController.ts b/src/controllers/api/placeDecoInComponentController.ts index 28fa84bc..b02d2a4f 100644 --- a/src/controllers/api/placeDecoInComponentController.ts +++ b/src/controllers/api/placeDecoInComponentController.ts @@ -24,6 +24,11 @@ export const placeDecoInComponentController: RequestHandler = async (req, res) = Name: request.Name }); + const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == request.Type); + if (meta && meta.capacityCost) { + component.DecoCapacity -= meta.capacityCost; + } + await guild.save(); res.json(getDojoClient(guild, 0)); }; diff --git a/src/services/guildService.ts b/src/services/guildService.ts index fbc3e37b..12c45a3c 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -94,7 +94,7 @@ export const scaleRequiredCount = (count: number): number => { export const removeDojoRoom = (guild: TGuildDatabaseDocument, componentId: string): void => { const component = guild.DojoComponents.splice( - guild.DojoComponents.findIndex(x => x._id.toString() === componentId), + guild.DojoComponents.findIndex(x => x._id.equals(componentId)), 1 )[0]; const meta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf); @@ -103,3 +103,15 @@ export const removeDojoRoom = (guild: TGuildDatabaseDocument, componentId: strin guild.DojoEnergy -= meta.energy; } }; + +export const removeDojoDeco = (guild: TGuildDatabaseDocument, componentId: string, decoId: string): void => { + const component = guild.DojoComponents.id(componentId)!; + const deco = component.Decos!.splice( + component.Decos!.findIndex(x => x._id.equals(decoId)), + 1 + )[0]; + const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type); + if (meta && meta.capacityCost) { + component.DecoCapacity! += meta.capacityCost; + } +};