From f94ecbfbfc86469b687e050c7ffa1edae1b1d45a Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Thu, 17 Apr 2025 10:50:24 -0700 Subject: [PATCH] chore: validate railjack repair start (#1698) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1698 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/guildTechController.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/controllers/api/guildTechController.ts b/src/controllers/api/guildTechController.ts index ebfd40ea..b2490178 100644 --- a/src/controllers/api/guildTechController.ts +++ b/src/controllers/api/guildTechController.ts @@ -97,6 +97,19 @@ export const guildTechController: RequestHandler = async (req, res) => { res.end(); } else { const recipe = ExportDojoRecipes.research[data.RecipeType]; + if (data.TechProductCategory) { + if ( + data.TechProductCategory != "CrewShipWeapons" && + data.TechProductCategory != "CrewShipWeaponSkins" + ) { + throw new Error(`unexpected TechProductCategory: ${data.TechProductCategory}`); + } + if (!inventory[getSalvageCategory(data.TechProductCategory)].id(data.CategoryItemId)) { + throw new Error( + `no item with id ${data.CategoryItemId} in ${getSalvageCategory(data.TechProductCategory)} array` + ); + } + } const techProject = inventory.PersonalTechProjects[ inventory.PersonalTechProjects.push({ @@ -380,6 +393,12 @@ interface IGuildTechContributeRequest { VaultMiscItems: IMiscItem[]; } +const getSalvageCategory = ( + category: "CrewShipWeapons" | "CrewShipWeaponSkins" +): "CrewShipSalvagedWeapons" | "CrewShipSalvagedWeaponSkins" => { + return category == "CrewShipWeapons" ? "CrewShipSalvagedWeapons" : "CrewShipSalvagedWeaponSkins"; +}; + const claimSalvagedComponent = (inventory: TInventoryDatabaseDocument, itemId: string): IInventoryChanges => { // delete personal tech project const personalTechProjectIndex = inventory.PersonalTechProjects.findIndex(x => x.CategoryItemId?.equals(itemId)); @@ -387,7 +406,7 @@ const claimSalvagedComponent = (inventory: TInventoryDatabaseDocument, itemId: s inventory.PersonalTechProjects.splice(personalTechProjectIndex, 1); const category = personalTechProject.ProductCategory! as "CrewShipWeapons" | "CrewShipWeaponSkins"; - const salvageCategory = category == "CrewShipWeapons" ? "CrewShipSalvagedWeapons" : "CrewShipSalvagedWeaponSkins"; + const salvageCategory = getSalvageCategory(category); // find salved part & delete it const salvageIndex = inventory[salvageCategory].findIndex(x => x._id.equals(itemId));