From 695dcf98e03cea11c0d0b7ca0c8808d2e129bb1e Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Thu, 24 Jul 2025 05:30:55 -0700 Subject: [PATCH] chore: handle sale of fusion treasures (#2542) Closes #2541 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2542 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/fusionTreasuresController.ts | 12 ++---------- src/controllers/api/sellController.ts | 10 +++++++++- src/helpers/inventoryHelpers.ts | 10 ++++++++++ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/controllers/api/fusionTreasuresController.ts b/src/controllers/api/fusionTreasuresController.ts index 086f017..27ea782 100644 --- a/src/controllers/api/fusionTreasuresController.ts +++ b/src/controllers/api/fusionTreasuresController.ts @@ -2,22 +2,14 @@ import { RequestHandler } from "express"; import { ExportResources } from "warframe-public-export-plus"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { addFusionTreasures, addMiscItems, getInventory } from "@/src/services/inventoryService"; -import { IFusionTreasure, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { parseFusionTreasure } from "@/src/helpers/inventoryHelpers"; interface IFusionTreasureRequest { oldTreasureName: string; newTreasureName: string; } -const parseFusionTreasure = (name: string, count: number): IFusionTreasure => { - const arr = name.split("_"); - return { - ItemType: arr[0], - Sockets: parseInt(arr[1], 16), - ItemCount: count - }; -}; - export const fusionTreasuresController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const inventory = await getInventory(accountId); diff --git a/src/controllers/api/sellController.ts b/src/controllers/api/sellController.ts index 461d83b..b19cf2d 100644 --- a/src/controllers/api/sellController.ts +++ b/src/controllers/api/sellController.ts @@ -10,13 +10,15 @@ import { combineInventoryChanges, addCrewShipRawSalvage, addFusionPoints, - addCrewShipFusionPoints + addCrewShipFusionPoints, + addFusionTreasures } from "@/src/services/inventoryService"; import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes"; import { ExportDojoRecipes } from "warframe-public-export-plus"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { sendWsBroadcastEx } from "@/src/services/wsService"; +import { parseFusionTreasure } from "@/src/helpers/inventoryHelpers"; export const sellController: RequestHandler = async (req, res) => { const payload = JSON.parse(String(req.body)) as ISellRequest; @@ -295,6 +297,11 @@ export const sellController: RequestHandler = async (req, res) => { ]); }); } + if (payload.Items.FusionTreasures) { + payload.Items.FusionTreasures.forEach(sellItem => { + addFusionTreasures(inventory, [parseFusionTreasure(sellItem.String, sellItem.Count * -1)]); + }); + } await inventory.save(); res.json({ @@ -327,6 +334,7 @@ interface ISellRequest { CrewMembers?: ISellItem[]; CrewShipWeapons?: ISellItem[]; CrewShipWeaponSkins?: ISellItem[]; + FusionTreasures?: ISellItem[]; }; SellPrice: number; SellCurrency: diff --git a/src/helpers/inventoryHelpers.ts b/src/helpers/inventoryHelpers.ts index 2bcbe90..552ab3e 100644 --- a/src/helpers/inventoryHelpers.ts +++ b/src/helpers/inventoryHelpers.ts @@ -1,6 +1,7 @@ import { IMongoDate, IOid, IOidWithLegacySupport } from "@/src/types/commonTypes"; import { Types } from "mongoose"; import { TRarity } from "warframe-public-export-plus"; +import { IFusionTreasure } from "@/src/types/inventoryTypes/inventoryTypes"; export const version_compare = (a: string, b: string): number => { const a_digits = a @@ -51,6 +52,15 @@ export const fromMongoDate = (date: IMongoDate): Date => { return new Date(parseInt(date.$date.$numberLong)); }; +export const parseFusionTreasure = (name: string, count: number): IFusionTreasure => { + const arr = name.split("_"); + return { + ItemType: arr[0], + Sockets: parseInt(arr[1], 16), + ItemCount: count + }; +}; + export type TTraitsPool = Record< "Colors" | "EyeColors" | "FurPatterns" | "BodyTypes" | "Heads" | "Tails", { type: string; rarity: TRarity }[]