diff --git a/src/controllers/api/contributeToVaultController.ts b/src/controllers/api/contributeToVaultController.ts index b1ac10d8..58079e02 100644 --- a/src/controllers/api/contributeToVaultController.ts +++ b/src/controllers/api/contributeToVaultController.ts @@ -1,5 +1,5 @@ import { GuildMember } from "@/src/models/guildModel"; -import { getGuildForRequestEx } from "@/src/services/guildService"; +import { addVaultMiscItems, getGuildForRequestEx } from "@/src/services/guildService"; import { addFusionTreasures, addMiscItems, addShipDecorations, getInventory } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { IFusionTreasure, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; @@ -23,11 +23,17 @@ export const contributeToVaultController: RequestHandler = async (req, res) => { guildMember.RegularCreditsContributed += request.RegularCredits; } if (request.MiscItems.length) { - guild.VaultMiscItems ??= []; + addVaultMiscItems(guild, request.MiscItems); + guildMember.MiscItemsContributed ??= []; for (const item of request.MiscItems) { - guild.VaultMiscItems.push(item); - guildMember.MiscItemsContributed.push(item); + const miscItemContribution = guildMember.MiscItemsContributed.find(x => x.ItemType == item.ItemType); + if (miscItemContribution) { + miscItemContribution.ItemCount += item.ItemCount; + } else { + guildMember.MiscItemsContributed.push(item); + } + addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]); } } diff --git a/src/services/guildService.ts b/src/services/guildService.ts index 44df7b96..9c26c268 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -22,6 +22,7 @@ import { logger } from "../utils/logger"; import { config } from "./configService"; import { Account } from "../models/loginModel"; import { getRandomInt } from "./rngService"; +import { ITypeCount } from "../types/inventoryTypes/inventoryTypes"; export const getGuildForRequest = async (req: Request): Promise => { const accountId = await getAccountIdForRequest(req); @@ -284,15 +285,7 @@ const moveResourcesToVault = (guild: TGuildDatabaseDocument, component: IDojoCon guild.VaultRegularCredits += component.RegularCredits; } if (component.MiscItems) { - guild.VaultMiscItems ??= []; - for (const componentMiscItem of component.MiscItems) { - const vaultMiscItem = guild.VaultMiscItems.find(x => x.ItemType == componentMiscItem.ItemType); - if (vaultMiscItem) { - vaultMiscItem.ItemCount += componentMiscItem.ItemCount; - } else { - guild.VaultMiscItems.push(componentMiscItem); - } - } + addVaultMiscItems(guild, component.MiscItems); } if (component.RushPlatinum) { guild.VaultPremiumCredits ??= 0; @@ -300,6 +293,18 @@ const moveResourcesToVault = (guild: TGuildDatabaseDocument, component: IDojoCon } }; +export const addVaultMiscItems = (guild: TGuildDatabaseDocument, miscItems: ITypeCount[]): void => { + guild.VaultMiscItems ??= []; + for (const miscItem of miscItems) { + const vaultMiscItem = guild.VaultMiscItems.find(x => x.ItemType == miscItem.ItemType); + if (vaultMiscItem) { + vaultMiscItem.ItemCount += miscItem.ItemCount; + } else { + guild.VaultMiscItems.push(miscItem); + } + } +}; + export const processDojoBuildMaterialsGathered = (guild: TGuildDatabaseDocument, build: IDojoBuild): void => { if (build.guildXpValue) { guild.ClaimedXP ??= [];