From 44f5133bdba828ddd3761a98d63027d1143e4364 Mon Sep 17 00:00:00 2001 From: Sainan Date: Thu, 2 Jan 2025 06:58:11 +0100 Subject: [PATCH] chore: move syndicate sacrifice stuff into syndicateSacrificeController --- .../api/syndicateSacrificeController.ts | 63 ++++++++++++++----- src/services/inventoryService.ts | 42 ------------- src/types/syndicateTypes.ts | 15 ----- 3 files changed, 49 insertions(+), 71 deletions(-) delete mode 100644 src/types/syndicateTypes.ts diff --git a/src/controllers/api/syndicateSacrificeController.ts b/src/controllers/api/syndicateSacrificeController.ts index cf7cbfd0..e31f807b 100644 --- a/src/controllers/api/syndicateSacrificeController.ts +++ b/src/controllers/api/syndicateSacrificeController.ts @@ -1,24 +1,59 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; -import { syndicateSacrifice } from "@/src/services/inventoryService"; -import { ISyndicateSacrifice } from "@/src/types/syndicateTypes"; import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; +import { ExportSyndicates } from "warframe-public-export-plus"; +import { handleStoreItemAcquisition } from "@/src/services/purchaseService"; +import { getInventory } from "@/src/services/inventoryService"; +import { IInventoryChanges } from "@/src/types/purchaseTypes"; -const syndicateSacrificeController: RequestHandler = async (request, response) => { +export const syndicateSacrificeController: RequestHandler = async (request, response) => { const accountId = await getAccountIdForRequest(request); - const update = getJSONfromString(String(request.body)) as ISyndicateSacrifice; - let reply = {}; - try { - if (typeof update !== "object") { - throw new Error("Invalid data format"); - } + const inventory = await getInventory(accountId); + const data = getJSONfromString(String(request.body)) as ISyndicateSacrifice; - reply = await syndicateSacrifice(update, accountId); - } catch (err) { - console.error("Error parsing JSON data:", err); + let syndicate = inventory.Affiliations.find(x => x.Tag == data.AffiliationTag); + if (!syndicate) { + syndicate = inventory.Affiliations[inventory.Affiliations.push({ Tag: data.AffiliationTag, Standing: 0 }) - 1]; } - response.json(reply); + let reward: string | undefined; + + const manifest = ExportSyndicates[data.AffiliationTag]; + if (manifest?.initiationReward && data.SacrificeLevel == 0) { + reward = manifest.initiationReward; + syndicate.Initiated = true; + } + + const level = data.SacrificeLevel - (syndicate.Title ?? 0); + const res: ISyndicateSacrificeResponse = { + AffiliationTag: data.AffiliationTag, + InventoryChanges: {}, + Level: data.SacrificeLevel, + LevelIncrease: level <= 0 ? 1 : level, + NewEpisodeReward: syndicate?.Tag == "RadioLegionIntermission9Syndicate" + }; + + if (syndicate?.Title !== undefined) syndicate.Title += 1; + + await inventory.save(); + + if (reward) { + res.InventoryChanges = (await handleStoreItemAcquisition(reward, accountId)).InventoryChanges; + } + + response.json(res); }; -export { syndicateSacrificeController }; +interface ISyndicateSacrifice { + AffiliationTag: string; + SacrificeLevel: number; + AllowMultiple: boolean; +} + +interface ISyndicateSacrificeResponse { + AffiliationTag: string; + Level: number; + LevelIncrease: number; + InventoryChanges: IInventoryChanges; + NewEpisodeReward: boolean; +} diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 5b0ce1cc..1265e802 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -28,7 +28,6 @@ import { } from "../types/requestTypes"; import { logger } from "@/src/utils/logger"; import { getWeaponType, getExalted } from "@/src/services/itemDataService"; -import { ISyndicateSacrifice, ISyndicateSacrificeResponse } from "../types/syndicateTypes"; import { IEquipmentClient, IItemConfig } from "../types/inventoryTypes/commonInventoryTypes"; import { ExportArcanes, @@ -38,11 +37,9 @@ import { ExportRecipes, ExportResources, ExportSentinels, - ExportSyndicates, ExportUpgrades } from "warframe-public-export-plus"; import { createShip } from "./shipService"; -import { handleStoreItemAcquisition } from "./purchaseService"; export const createInventory = async ( accountOwnerId: Types.ObjectId, @@ -552,45 +549,6 @@ export const updateTheme = async (data: IThemeUpdateRequest, accountId: string): await inventory.save(); }; -export const syndicateSacrifice = async ( - data: ISyndicateSacrifice, - accountId: string -): Promise => { - const inventory = await getInventory(accountId); - - let syndicate = inventory.Affiliations.find(x => x.Tag == data.AffiliationTag); - if (!syndicate) { - syndicate = inventory.Affiliations[inventory.Affiliations.push({ Tag: data.AffiliationTag, Standing: 0 }) - 1]; - } - - let reward: string | undefined; - - const manifest = ExportSyndicates[data.AffiliationTag]; - if (manifest?.initiationReward && data.SacrificeLevel == 0) { - reward = manifest.initiationReward; - syndicate.Initiated = true; - } - - const level = data.SacrificeLevel - (syndicate.Title ?? 0); - const res: ISyndicateSacrificeResponse = { - AffiliationTag: data.AffiliationTag, - InventoryChanges: {}, - Level: data.SacrificeLevel, - LevelIncrease: level <= 0 ? 1 : level, - NewEpisodeReward: syndicate?.Tag == "RadioLegionIntermission9Syndicate" - }; - - if (syndicate?.Title !== undefined) syndicate.Title += 1; - - await inventory.save(); - - if (reward) { - res.InventoryChanges = (await handleStoreItemAcquisition(reward, accountId)).InventoryChanges; - } - - return res; -}; - export const addEquipment = async ( category: TEquipmentKey, type: string, diff --git a/src/types/syndicateTypes.ts b/src/types/syndicateTypes.ts deleted file mode 100644 index 741f3760..00000000 --- a/src/types/syndicateTypes.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IInventoryChanges } from "./purchaseTypes"; - -export interface ISyndicateSacrifice { - AffiliationTag: string; - SacrificeLevel: number; - AllowMultiple: boolean; -} - -export interface ISyndicateSacrificeResponse { - AffiliationTag: string; - Level: number; - LevelIncrease: number; - InventoryChanges: IInventoryChanges; - NewEpisodeReward: boolean; -}