diff --git a/src/controllers/api/inventorySlotsController.ts b/src/controllers/api/inventorySlotsController.ts index 3face44e..8a8fce0a 100644 --- a/src/controllers/api/inventorySlotsController.ts +++ b/src/controllers/api/inventorySlotsController.ts @@ -2,7 +2,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory, updateCurrency, updateSlots } from "@/src/services/inventoryService"; import { RequestHandler } from "express"; import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes"; -import { logger } from "@/src/utils/logger"; +import { exhaustive } from "@/src/utils/ts-utils"; /* loadout slots are additionally purchased slots only @@ -22,13 +22,44 @@ export const inventorySlotsController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const body = JSON.parse(req.body as string) as IInventorySlotsRequest; - if (body.Bin != InventorySlot.SUITS && body.Bin != InventorySlot.PVE_LOADOUTS) { - logger.warn(`unexpected slot purchase of type ${body.Bin}, account may be overcharged`); + let price; + let amount; + switch (body.Bin) { + case InventorySlot.SUITS: + case InventorySlot.MECHSUITS: + case InventorySlot.PVE_LOADOUTS: + case InventorySlot.CREWMEMBERS: + price = 20; + amount = 1; + break; + + case InventorySlot.SPACESUITS: + price = 12; + amount = 1; + break; + + case InventorySlot.WEAPONS: + case InventorySlot.SPACEWEAPONS: + case InventorySlot.SENTINELS: + case InventorySlot.RJ_COMPONENT_AND_ARMAMENTS: + case InventorySlot.AMPS: + price = 12; + amount = 2; + break; + + case InventorySlot.RIVENS: + price = 60; + amount = 3; + break; + + default: + exhaustive(body.Bin); + throw new Error(`unexpected slot purchase of type ${body.Bin as string}`); } const inventory = await getInventory(accountId); - const currencyChanges = updateCurrency(inventory, 20, true); - updateSlots(inventory, body.Bin, 1, 1); + const currencyChanges = updateCurrency(inventory, price, true); + updateSlots(inventory, body.Bin, amount, amount); await inventory.save(); res.json({ InventoryChanges: currencyChanges }); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index b10d3282..4fa39f93 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -520,7 +520,8 @@ export enum InventorySlot { SENTINELS = "SentinelBin", AMPS = "OperatorAmpBin", RJ_COMPONENT_AND_ARMAMENTS = "CrewShipSalvageBin", - CREWMEMBERS = "CrewMemberBin" + CREWMEMBERS = "CrewMemberBin", + RIVENS = "RandomModBin" } export interface ISlots { diff --git a/src/utils/ts-utils.ts b/src/utils/ts-utils.ts index 4f456c12..93b43fd4 100644 --- a/src/utils/ts-utils.ts +++ b/src/utils/ts-utils.ts @@ -3,3 +3,5 @@ type Entries = (K extends unknown ? [K, T[K]] : export function getEntriesUnsafe(object: T): Entries { return Object.entries(object) as Entries; } + +export const exhaustive = (_: never): void => {};