From 002b0cb93f4533b5baa5aa864ba50f0b2600e049 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 6 Apr 2025 16:08:36 -0700 Subject: [PATCH] chore: fix code duplication for quest completion (#1497) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1497 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/services/itemDataService.ts | 29 -------------- src/services/questService.ts | 71 +++++++++++++++++++++------------ 2 files changed, 45 insertions(+), 55 deletions(-) diff --git a/src/services/itemDataService.ts b/src/services/itemDataService.ts index f6feae12..e071111f 100644 --- a/src/services/itemDataService.ts +++ b/src/services/itemDataService.ts @@ -1,7 +1,5 @@ import { IKeyChainRequest } from "@/src/types/requestTypes"; import { getIndexAfter } from "@/src/helpers/stringHelpers"; -import { ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; -import { logger } from "@/src/utils/logger"; import { dict_de, dict_en, @@ -34,7 +32,6 @@ import { IRecipe, TReward } from "warframe-public-export-plus"; -import questCompletionItems from "@/static/fixed_responses/questCompletionRewards.json"; import { IMessage } from "../models/inboxModel"; export type WeaponTypeInternal = @@ -181,32 +178,6 @@ export const getLevelKeyRewards = ( }; }; -export const getQuestCompletionItems = (questKey: string): ITypeCount[] | undefined => { - if (questKey in questCompletionItems) { - return questCompletionItems[questKey as keyof typeof questCompletionItems]; - } - logger.warn(`Quest ${questKey} not found in questCompletionItems`); - - const items: ITypeCount[] = []; - const meta = ExportKeys[questKey]; - if (meta.rewards) { - for (const reward of meta.rewards) { - if (reward.rewardType == "RT_STORE_ITEM") { - items.push({ - ItemType: fromStoreItem(reward.itemType), - ItemCount: 1 - }); - } else if (reward.rewardType == "RT_RESOURCE" || reward.rewardType == "RT_RECIPE") { - items.push({ - ItemType: reward.itemType, - ItemCount: reward.amount - }); - } - } - } - return items; -}; - export const getKeyChainMessage = ({ KeyChain, ChainStage }: IKeyChainRequest): IMessage => { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const chainStages = ExportKeys[KeyChain]?.chainStages; diff --git a/src/services/questService.ts b/src/services/questService.ts index e738eb57..78b3aba0 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -3,18 +3,14 @@ import { isEmptyObject } from "@/src/helpers/general"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { createMessage } from "@/src/services/inboxService"; import { addItem, addItems, addKeyChainItems, setupKahlSyndicate } from "@/src/services/inventoryService"; -import { - fromStoreItem, - getKeyChainMessage, - getLevelKeyRewards, - getQuestCompletionItems -} from "@/src/services/itemDataService"; -import { IQuestKeyClient, IQuestKeyDatabase, IQuestStage } from "@/src/types/inventoryTypes/inventoryTypes"; +import { fromStoreItem, getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService"; +import { IQuestKeyClient, IQuestKeyDatabase, IQuestStage, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; import { logger } from "@/src/utils/logger"; import { Types } from "mongoose"; import { ExportKeys } from "warframe-public-export-plus"; import { addFixedLevelRewards } from "./missionInventoryUpdateService"; import { IInventoryChanges } from "../types/purchaseTypes"; +import questCompletionItems from "@/static/fixed_responses/questCompletionRewards.json"; export interface IUpdateQuestRequest { QuestKeys: Omit[]; @@ -42,23 +38,12 @@ export const updateQuestKey = async ( inventory.QuestKeys[questKeyIndex].overwrite(questKeyUpdate[0]); - let inventoryChanges: IInventoryChanges = {}; + const inventoryChanges: IInventoryChanges = {}; if (questKeyUpdate[0].Completed) { inventory.QuestKeys[questKeyIndex].CompletionDate = new Date(); - logger.debug(`completed quest ${questKeyUpdate[0].ItemType} `); - const questKeyName = questKeyUpdate[0].ItemType; - const questCompletionItems = getQuestCompletionItems(questKeyName); - logger.debug(`quest completion items`, questCompletionItems); - - if (questCompletionItems) { - inventoryChanges = await addItems(inventory, questCompletionItems); - } - inventory.ActiveQuest = ""; - - if (questKeyUpdate[0].ItemType == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain") { - setupKahlSyndicate(inventory); - } + const questKey = questKeyUpdate[0].ItemType; + await handleQuestCompletion(inventory, questKey, inventoryChanges); } return inventoryChanges; }; @@ -177,6 +162,42 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest await giveKeyChainMissionReward(inventory, { KeyChain: questKey, ChainStage: i }); } + await handleQuestCompletion(inventory, questKey); +}; + +const getQuestCompletionItems = (questKey: string): ITypeCount[] | undefined => { + if (questKey in questCompletionItems) { + return questCompletionItems[questKey as keyof typeof questCompletionItems]; + } + logger.warn(`Quest ${questKey} not found in questCompletionItems`); + + const items: ITypeCount[] = []; + const meta = ExportKeys[questKey]; + if (meta.rewards) { + for (const reward of meta.rewards) { + if (reward.rewardType == "RT_STORE_ITEM") { + items.push({ + ItemType: fromStoreItem(reward.itemType), + ItemCount: 1 + }); + } else if (reward.rewardType == "RT_RESOURCE" || reward.rewardType == "RT_RECIPE") { + items.push({ + ItemType: reward.itemType, + ItemCount: reward.amount + }); + } + } + } + return items; +}; + +const handleQuestCompletion = async ( + inventory: TInventoryDatabaseDocument, + questKey: string, + inventoryChanges: IInventoryChanges = {} +): Promise => { + logger.debug(`completed quest ${questKey}`); + if (questKey == "/Lotus/Types/Keys/OrokinMoonQuest/OrokinMoonQuestKeyChain") { void createMessage(inventory.accountOwnerId, [ { @@ -191,19 +212,17 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest highPriority: true } ]); + } else if (questKey == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain") { + setupKahlSyndicate(inventory); } const questCompletionItems = getQuestCompletionItems(questKey); logger.debug(`quest completion items`, questCompletionItems); if (questCompletionItems) { - await addItems(inventory, questCompletionItems); + await addItems(inventory, questCompletionItems, inventoryChanges); } if (inventory.ActiveQuest == questKey) inventory.ActiveQuest = ""; - - if (questKey == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain") { - setupKahlSyndicate(inventory); - } }; export const giveKeyChainItem = async (