diff --git a/src/controllers/api/updateQuestController.ts b/src/controllers/api/updateQuestController.ts index 3a91ada0..767528d7 100644 --- a/src/controllers/api/updateQuestController.ts +++ b/src/controllers/api/updateQuestController.ts @@ -1,10 +1,8 @@ import { RequestHandler } from "express"; import { parseString } from "@/src/helpers/general"; -import { logger } from "@/src/utils/logger"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { updateQuestKey, IUpdateQuestRequest } from "@/src/services/questService"; -import { getQuestCompletionItems } from "@/src/services/itemDataService"; -import { addItems, getInventory } from "@/src/services/inventoryService"; +import { getInventory } from "@/src/services/inventoryService"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; // eslint-disable-next-line @typescript-eslint/no-misused-promises @@ -22,20 +20,7 @@ export const updateQuestController: RequestHandler = async (req, res) => { const updateQuestResponse: { CustomData?: string; InventoryChanges?: IInventoryChanges; MissionRewards: [] } = { MissionRewards: [] }; - updateQuestKey(inventory, updateQuestRequest.QuestKeys); - - if (updateQuestRequest.QuestKeys[0].Completed) { - logger.debug(`completed quest ${updateQuestRequest.QuestKeys[0].ItemType} `); - const questKeyName = updateQuestRequest.QuestKeys[0].ItemType; - const questCompletionItems = getQuestCompletionItems(questKeyName); - logger.debug(`quest completion items`, questCompletionItems); - - if (questCompletionItems) { - const inventoryChanges = await addItems(inventory, questCompletionItems); - updateQuestResponse.InventoryChanges = inventoryChanges; - } - inventory.ActiveQuest = ""; - } + updateQuestResponse.InventoryChanges = await updateQuestKey(inventory, updateQuestRequest.QuestKeys); //TODO: might need to parse the custom data and add the associated items to inventory if (updateQuestRequest.QuestKeys[0].CustomData) { diff --git a/src/controllers/custom/manageQuestsController.ts b/src/controllers/custom/manageQuestsController.ts index 6899b76d..2234ec00 100644 --- a/src/controllers/custom/manageQuestsController.ts +++ b/src/controllers/custom/manageQuestsController.ts @@ -28,7 +28,7 @@ export const manageQuestsController: RequestHandler = async (req, res) => { switch (operation) { case "updateKey": { //TODO: if this is intended to be used, one needs to add a updateQuestKeyMultiple, the game does never intend to do it, so it errors for multiple keys. - updateQuestKey(inventory, questKeyUpdate); + await updateQuestKey(inventory, questKeyUpdate); break; } case "unlockAll": { diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 8fefe1ba..71c2828e 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -95,7 +95,7 @@ export const addMissionInventoryUpdates = async ( inventory.RegularCredits += value; break; case "QuestKeys": - updateQuestKey(inventory, value); + await updateQuestKey(inventory, value); break; case "AffiliationChanges": updateSyndicate(inventory, value); diff --git a/src/services/questService.ts b/src/services/questService.ts index f52536be..5e70f502 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -2,8 +2,13 @@ import { IKeyChainRequest } from "@/src/controllers/api/giveKeyChainTriggeredIte import { isEmptyObject } from "@/src/helpers/general"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { createMessage } from "@/src/services/inboxService"; -import { addItem, addKeyChainItems } from "@/src/services/inventoryService"; -import { fromStoreItem, getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService"; +import { addItem, addItems, addKeyChainItems } from "@/src/services/inventoryService"; +import { + fromStoreItem, + getKeyChainMessage, + getLevelKeyRewards, + getQuestCompletionItems +} from "@/src/services/itemDataService"; import { IInventoryDatabase, IQuestKeyClient, @@ -25,10 +30,10 @@ export interface IUpdateQuestRequest { DoQuestReward: boolean; } -export const updateQuestKey = ( +export const updateQuestKey = async ( inventory: HydratedDocument, questKeyUpdate: IUpdateQuestRequest["QuestKeys"] -): void => { +): Promise => { if (questKeyUpdate.length > 1) { logger.error(`more than 1 quest key not supported`); throw new Error("more than 1 quest key not supported"); @@ -42,9 +47,21 @@ export const updateQuestKey = ( inventory.QuestKeys[questKeyIndex] = questKeyUpdate[0]; + let 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 as TInventoryDatabaseDocument, questCompletionItems); + } + inventory.ActiveQuest = ""; } + return inventoryChanges; }; export const updateQuestStage = (