From b9c7daf4f6af9249f548fbc809f2782213195b19 Mon Sep 17 00:00:00 2001 From: Sainan Date: Thu, 9 May 2024 16:04:31 +0200 Subject: [PATCH] feat: implement purchasing of blueprints & gear items (#208) --- src/services/inventoryService.ts | 7 ++--- src/services/purchaseService.ts | 46 +++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 611cfd02..117891a4 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -12,7 +12,8 @@ import { IInventoryDatabaseDocument, IMiscItem, IMission, - IRawUpgrade + IRawUpgrade, + ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; import { IGenericUpdate } from "../types/genericUpdate"; import { IArtifactsRequest, IMissionInventoryUpdateRequest, IThemeUpdateRequest } from "../types/requestTypes"; @@ -245,7 +246,7 @@ export const addMiscItems = (inventory: IInventoryDatabaseDocument, itemsArray: }); }; -const addConsumables = (inventory: IInventoryDatabaseDocument, itemsArray: IConsumable[] | undefined) => { +export const addConsumables = (inventory: IInventoryDatabaseDocument, itemsArray: IConsumable[] | undefined) => { const { Consumables } = inventory; itemsArray?.forEach(({ ItemCount, ItemType }) => { @@ -260,7 +261,7 @@ const addConsumables = (inventory: IInventoryDatabaseDocument, itemsArray: ICons }); }; -const addRecipes = (inventory: IInventoryDatabaseDocument, itemsArray: IConsumable[] | undefined) => { +export const addRecipes = (inventory: IInventoryDatabaseDocument, itemsArray: ITypeCount[] | undefined) => { const { Recipes } = inventory; itemsArray?.forEach(({ ItemCount, ItemType }) => { diff --git a/src/services/purchaseService.ts b/src/services/purchaseService.ts index 3a0b78a8..d9ca8e14 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -3,17 +3,19 @@ import { getWeaponType } from "@/src/services/itemDataService"; import { getSubstringFromKeyword } from "@/src/helpers/stringHelpers"; import { addBooster, + addConsumables, addCustomization, addMechSuit, addMiscItems, addPowerSuit, + addRecipes, addSentinel, addWeapon, getInventory, updateCurrency, updateSlots } from "@/src/services/inventoryService"; -import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IConsumable, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; import { IPurchaseRequest, IPurchaseResponse, SlotNameToInventoryName, SlotPurchase } from "@/src/types/purchaseTypes"; import { logger } from "@/src/utils/logger"; @@ -180,14 +182,18 @@ const handleTypesPurchase = async (typesName: string, accountId: string, quantit case "AvatarImages": case "SuitCustomizations": return await handleCustomizationPurchase(typesName, accountId); - // case "Recipes": - // break; case "Sentinels": return await handleSentinelPurchase(typesName, accountId); case "SlotItems": return await handleSlotPurchase(typesName, accountId); case "Items": return await handleMiscItemPurchase(typesName, accountId, quantity); + case "Recipes": + case "Consumables": // Blueprints for Ciphers, Antitoxins + return await handleRecipesPurchase(typesName, accountId, quantity); + case "Restoratives": // Codex Scanner, Remote Observer, Starburst + return await handleRestorativesPurchase(typesName, accountId, quantity); + break; default: throw new Error(`unknown Types category: ${typeCategory} not implemented or new`); } @@ -258,3 +264,37 @@ const handleMiscItemPurchase = async (uniqueName: string, accountId: string, qua } }; }; + +const handleRecipesPurchase = async (uniqueName: string, accountId: string, quantity: number) => { + const inventory = await getInventory(accountId); + const recipeChanges = [ + { + ItemType: uniqueName, + ItemCount: quantity + } satisfies ITypeCount + ]; + addRecipes(inventory, recipeChanges); + await inventory.save(); + return { + InventoryChanges: { + Recipes: recipeChanges + } + }; +}; + +const handleRestorativesPurchase = async (uniqueName: string, accountId: string, quantity: number) => { + const inventory = await getInventory(accountId); + const consumablesChanges = [ + { + ItemType: uniqueName, + ItemCount: quantity + } satisfies IConsumable + ]; + addConsumables(inventory, consumablesChanges); + await inventory.save(); + return { + InventoryChanges: { + Consumables: consumablesChanges + } + }; +};