From 1ead5817803df0714202faaec4afe2783bfa3745 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Tue, 17 Jun 2025 05:02:58 -0700 Subject: [PATCH] chore: improve typing of IFocusXp (#2182) Any given focus school can be undefined in this object due to importing. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2182 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/focusController.ts | 14 ++++++----- src/services/inventoryService.ts | 27 +++++++++++++++++----- src/types/inventoryTypes/inventoryTypes.ts | 10 ++++---- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/controllers/api/focusController.ts b/src/controllers/api/focusController.ts index 90b55a2e..c7f96a6d 100644 --- a/src/controllers/api/focusController.ts +++ b/src/controllers/api/focusController.ts @@ -43,7 +43,7 @@ export const focusController: RequestHandler = async (req, res) => { inventory.FocusAbility ??= focusType; inventory.FocusUpgrades.push({ ItemType: focusType }); if (inventory.FocusXP) { - inventory.FocusXP[focusPolarity] -= cost; + inventory.FocusXP[focusPolarity]! -= cost; } await inventory.save(); res.json({ @@ -78,7 +78,7 @@ export const focusController: RequestHandler = async (req, res) => { cost += ExportFocusUpgrades[focusType].baseFocusPointCost; inventory.FocusUpgrades.push({ ItemType: focusType, Level: 0 }); } - inventory.FocusXP![focusPolarity] -= cost; + inventory.FocusXP![focusPolarity]! -= cost; await inventory.save(); res.json({ FocusTypes: request.FocusTypes, @@ -96,7 +96,7 @@ export const focusController: RequestHandler = async (req, res) => { const focusUpgradeDb = inventory.FocusUpgrades.find(entry => entry.ItemType == focusUpgrade.ItemType)!; focusUpgradeDb.Level = focusUpgrade.Level; } - inventory.FocusXP![focusPolarity] -= cost; + inventory.FocusXP![focusPolarity]! -= cost; await inventory.save(); res.json({ FocusInfos: request.FocusInfos, @@ -123,7 +123,7 @@ export const focusController: RequestHandler = async (req, res) => { const request = JSON.parse(String(req.body)) as IUnbindUpgradeRequest; const focusPolarity = focusTypeToPolarity(request.FocusTypes[0]); const inventory = await getInventory(accountId); - inventory.FocusXP![focusPolarity] -= 750_000 * request.FocusTypes.length; + inventory.FocusXP![focusPolarity]! -= 750_000 * request.FocusTypes.length; addMiscItems(inventory, [ { ItemType: "/Lotus/Types/Gameplay/Eidolon/Resources/SentientShards/SentientShardBrilliantItem", @@ -168,8 +168,10 @@ export const focusController: RequestHandler = async (req, res) => { shard.ItemCount *= -1; } const inventory = await getInventory(accountId); - inventory.FocusXP ??= { AP_POWER: 0, AP_TACTIC: 0, AP_DEFENSE: 0, AP_ATTACK: 0, AP_WARD: 0 }; - inventory.FocusXP[request.Polarity] += xp; + const polarity = request.Polarity; + inventory.FocusXP ??= {}; + inventory.FocusXP[polarity] ??= 0; + inventory.FocusXP[polarity] += xp; addMiscItems(inventory, request.Shards); await inventory.save(); break; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index d598cbb1..38c197f8 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1731,12 +1731,27 @@ export const addFocusXpIncreases = (inventory: TInventoryDatabaseDocument, focus AP_ANY } - inventory.FocusXP ??= { AP_ATTACK: 0, AP_DEFENSE: 0, AP_TACTIC: 0, AP_POWER: 0, AP_WARD: 0 }; - inventory.FocusXP.AP_ATTACK += focusXpPlus[FocusType.AP_ATTACK]; - inventory.FocusXP.AP_DEFENSE += focusXpPlus[FocusType.AP_DEFENSE]; - inventory.FocusXP.AP_TACTIC += focusXpPlus[FocusType.AP_TACTIC]; - inventory.FocusXP.AP_POWER += focusXpPlus[FocusType.AP_POWER]; - inventory.FocusXP.AP_WARD += focusXpPlus[FocusType.AP_WARD]; + inventory.FocusXP ??= {}; + if (focusXpPlus[FocusType.AP_ATTACK]) { + inventory.FocusXP.AP_ATTACK ??= 0; + inventory.FocusXP.AP_ATTACK += focusXpPlus[FocusType.AP_ATTACK]; + } + if (focusXpPlus[FocusType.AP_DEFENSE]) { + inventory.FocusXP.AP_DEFENSE ??= 0; + inventory.FocusXP.AP_DEFENSE += focusXpPlus[FocusType.AP_DEFENSE]; + } + if (focusXpPlus[FocusType.AP_TACTIC]) { + inventory.FocusXP.AP_TACTIC ??= 0; + inventory.FocusXP.AP_TACTIC += focusXpPlus[FocusType.AP_TACTIC]; + } + if (focusXpPlus[FocusType.AP_POWER]) { + inventory.FocusXP.AP_POWER ??= 0; + inventory.FocusXP.AP_POWER += focusXpPlus[FocusType.AP_POWER]; + } + if (focusXpPlus[FocusType.AP_WARD]) { + inventory.FocusXP.AP_WARD ??= 0; + inventory.FocusXP.AP_WARD += focusXpPlus[FocusType.AP_WARD]; + } if (!config.noDailyFocusLimit) { inventory.DailyFocus -= focusXpPlus.reduce((a, b) => a + b, 0); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 997b50f4..94149f7c 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -641,11 +641,11 @@ export interface IFocusUpgrade { } export interface IFocusXP { - AP_POWER: number; - AP_TACTIC: number; - AP_DEFENSE: number; - AP_ATTACK: number; - AP_WARD: number; + AP_POWER?: number; + AP_TACTIC?: number; + AP_DEFENSE?: number; + AP_ATTACK?: number; + AP_WARD?: number; } export type TFocusPolarity = keyof IFocusXP;