diff --git a/.gitignore b/.gitignore index ee9cbba6..70556674 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /.env /static/data/*.bin yarn.lock +/tmp \ No newline at end of file diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 54b7e548..8a255514 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -1,6 +1,57 @@ import { RequestHandler } from "express"; +import { addRawUpgrades, addMiscItems } from "@/src/services/inventoryService"; +import fs from 'fs'; +/* +- [ ] crossPlaySetting +- [ ] rewardsMultiplier +- [ ] ActiveBoosters +- [ ] LongGuns +- [ ] Pistols +- [ ] Suits +- [ ] Melee +- [x] RawUpgrades +- [x] MiscItems +- [ ] RegularCredits +- [ ] RandomUpgradesIdentified +- [ ] MissionFailed +- [ ] MissionStatus +- [ ] CurrentLoadOutIds +- [ ] AliveTime +- [ ] MissionTime +- [ ] Missions +- [ ] CompletedAlerts +- [ ] LastRegionPlayed +- [ ] GameModeId +- [ ] hosts +- [ ] ChallengeProgress +- [ ] SeasonChallengeHistory +- [ ] PS +- [ ] ActiveDojoColorResearch +- [ ] RewardInfo +- [ ] ReceivedCeremonyMsg +- [ ] LastCeremonyResetDate +- [ ] MissionPTS +- [ ] RepHash +- [ ] EndOfMatchUpload +- [ ] ObjectiveReached +- [ ] FpsAvg +- [ ] FpsMin +- [ ] FpsMax +- [ ] FpsSamples +*/ +const missionInventoryUpdateController: RequestHandler = async (req, res) => { + fs.writeFile("./tmp/test", req.body, function(err) { + if(err) { + return console.log(err); + } + }); + + const [data, _secondIGuessIsSalt] = String(req.body).split("\n"); + const {RawUpgrades, MiscItems} = JSON.parse(data); + const id = req.query.accountId as string; + addRawUpgrades(RawUpgrades, id); + addMiscItems(MiscItems, id); -const missionInventoryUpdateController: RequestHandler = (_req, res) => { res.json({}); }; diff --git a/src/models/inventoryModel.ts b/src/models/inventoryModel.ts index 552cc1f3..0b7f52d6 100644 --- a/src/models/inventoryModel.ts +++ b/src/models/inventoryModel.ts @@ -1,5 +1,5 @@ import { Model, Schema, Types, model } from "mongoose"; -import { FlavourItem, IInventoryDatabase } from "../types/inventoryTypes/inventoryTypes"; +import { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase } from "../types/inventoryTypes/inventoryTypes"; import { Oid } from "../types/commonTypes"; import { ISuitDatabase, ISuitDocument } from "@/src/types/inventoryTypes/SuitTypes"; import { IWeaponDatabase } from "@/src/types/inventoryTypes/weaponTypes"; @@ -334,6 +334,8 @@ type InventoryDocumentProps = { Pistols: Types.DocumentArray; Melee: Types.DocumentArray; FlavourItems: Types.DocumentArray; + RawUpgrades: Types.DocumentArray; + MiscItems: Types.DocumentArray; }; type InventoryModelType = Model; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 41b22959..2e9e0b96 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -5,7 +5,7 @@ import { Types } from "mongoose"; import { ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes"; import { SlotType } from "@/src/types/purchaseTypes"; import { IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes"; -import { FlavourItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { FlavourItem, RawUpgrade, MiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; const createInventory = async (accountOwnerId: Types.ObjectId) => { try { @@ -106,4 +106,36 @@ export const addCustomization = async (customizatonName: string, accountId: stri return changedInventory.FlavourItems[flavourItemIndex].toJSON(); //mongoose bug forces as FlavourItem }; +export const addRawUpgrades = async (rawUpgrades: RawUpgrade[], accountId: string): Promise => { + const inventory = await getInventory(accountId); + rawUpgrades?.forEach(item => { + const { ItemCount, ItemType } = item; + const existingItemIndex = inventory.RawUpgrades.findIndex(i => i.ItemType === ItemType); + + if (existingItemIndex !== -1) { + inventory.RawUpgrades[existingItemIndex].ItemCount += ItemCount; + inventory.markModified('RawUpgrades.' + existingItemIndex + '.ItemCount'); + } else { + inventory.RawUpgrades.push({ ItemCount, ItemType }); + } + }); + await inventory.save(); +}; + +export const addMiscItems = async (miscItems: MiscItem[], accountId: string): Promise => { + const inventory = await getInventory(accountId); + miscItems?.forEach(item => { + const { ItemCount, ItemType } = item; + const existingItemIndex = inventory.MiscItems.findIndex(i => i.ItemType === ItemType); + + if (existingItemIndex !== -1) { + inventory.MiscItems[existingItemIndex].ItemCount += ItemCount; + inventory.markModified('MiscItems.' + existingItemIndex + '.ItemCount'); + } else { + inventory.MiscItems.push({ ItemCount, ItemType }); + } + }); + await inventory.save(); +}; + export { createInventory, addPowerSuit }; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 938ac651..0e095a88 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -377,6 +377,16 @@ export interface FlavourItem { ItemType: string; } +export interface RawUpgrade { + ItemCount: number; + ItemType: string; +} + +export interface MiscItem { + ItemCount: number; + ItemType: string; +} + export interface CrewshipWeapon { PILOT: Pilot; PORT_GUNS: PortGuns;