From b66fdc17ba56faec0fa3b2b743d14a0e8495f25d Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 05:42:50 +0400 Subject: [PATCH 01/14] mission inventory update - mods, resources --- .gitignore | 1 + .../api/missionInventoryUpdateController.ts | 53 ++++++++++++++++++- src/models/inventoryModel.ts | 4 +- src/services/inventoryService.ts | 34 +++++++++++- src/types/inventoryTypes/inventoryTypes.ts | 10 ++++ 5 files changed, 99 insertions(+), 3 deletions(-) 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; -- 2.47.2 From 15ab3f76b1cafcc71cbbd0b499149037734e4422 Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 07:51:56 +0400 Subject: [PATCH 02/14] mission inventory update - exp --- .../api/missionInventoryUpdateController.ts | 15 +++-- src/services/inventoryService.ts | 63 ++++++++++--------- 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 8a255514..52e68106 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -1,14 +1,14 @@ import { RequestHandler } from "express"; -import { addRawUpgrades, addMiscItems } from "@/src/services/inventoryService"; +import { missionInventoryUpdate } from "@/src/services/inventoryService"; import fs from 'fs'; /* - [ ] crossPlaySetting - [ ] rewardsMultiplier - [ ] ActiveBoosters -- [ ] LongGuns -- [ ] Pistols -- [ ] Suits -- [ ] Melee +- [x] LongGuns +- [x] Pistols +- [x] Suits +- [x] Melee - [x] RawUpgrades - [x] MiscItems - [ ] RegularCredits @@ -47,10 +47,9 @@ const missionInventoryUpdateController: RequestHandler = async (req, res) => { }); 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); + + await missionInventoryUpdate(JSON.parse(data), id); res.json({}); }; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 2e9e0b96..c9f2520b 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -2,10 +2,11 @@ import { Inventory } from "@/src/models/inventoryModel"; import new_inventory from "@/static/fixed_responses/postTutorialInventory.json"; import config from "@/config.json"; import { Types } from "mongoose"; -import { ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes"; +import { ISuitDatabase, ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes"; import { SlotType } from "@/src/types/purchaseTypes"; -import { IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes"; -import { FlavourItem, RawUpgrade, MiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IWeaponDatabase, IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes"; +import { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase } from "@/src/types/inventoryTypes/inventoryTypes"; +import { items } from "@/static/data/items"; const createInventory = async (accountOwnerId: Types.ObjectId) => { try { @@ -106,35 +107,41 @@ 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 => { +export const missionInventoryUpdate = async (data: any, accountId: string): Promise => { + const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee } = data; 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(); -}; + const addGearExpByCategory = (gearArray: (ISuitDatabase|IWeaponDatabase)[], category: 'Pistols'|'LongGuns'|'Melee'|'Suits') => { + gearArray.forEach(({ ItemId, XP }: any) => { + const itemIndex = inventory[category].findIndex(i => i._id?.equals(ItemId.$oid)); + if (itemIndex !== -1) { + inventory[category][itemIndex].XP += XP; + inventory.markModified(`${category}.${itemIndex}.XP`); + } + }); + }; -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); + const addItemsByCategory = (itemsArray: (RawUpgrade | MiscItem)[], category: 'RawUpgrades'|'MiscItems') => { + itemsArray?.forEach(item => { + const { ItemCount, ItemType } = item; + const existingItemIndex = inventory[category].findIndex(i => i.ItemType === ItemType); + + if (existingItemIndex !== -1) { + inventory[category][existingItemIndex].ItemCount += ItemCount; + inventory.markModified(category + '.' + existingItemIndex + '.ItemCount'); + } else { + inventory[category].push({ ItemCount, ItemType }); + } + }); + }; + + addGearExpByCategory(Pistols, 'Pistols'); + addGearExpByCategory(LongGuns, 'LongGuns'); + addGearExpByCategory(Melee, 'Melee'); + addGearExpByCategory(Suits, 'Suits'); + addItemsByCategory(RawUpgrades, 'RawUpgrades'); // TODO - check mods fusion level + addItemsByCategory(MiscItems, 'MiscItems'); - if (existingItemIndex !== -1) { - inventory.MiscItems[existingItemIndex].ItemCount += ItemCount; - inventory.markModified('MiscItems.' + existingItemIndex + '.ItemCount'); - } else { - inventory.MiscItems.push({ ItemCount, ItemType }); - } - }); await inventory.save(); }; -- 2.47.2 From b583e7173a1ea1c0d4590f6b7918942fb9a37f0c Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 08:14:59 +0400 Subject: [PATCH 03/14] mission inventoryupdate - credits --- .../api/missionInventoryUpdateController.ts | 4 ++-- src/services/inventoryService.ts | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 52e68106..377072a6 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -11,7 +11,7 @@ import fs from 'fs'; - [x] Melee - [x] RawUpgrades - [x] MiscItems -- [ ] RegularCredits +- [x] RegularCredits - [ ] RandomUpgradesIdentified - [ ] MissionFailed - [ ] MissionStatus @@ -23,7 +23,7 @@ import fs from 'fs'; - [ ] LastRegionPlayed - [ ] GameModeId - [ ] hosts -- [ ] ChallengeProgress +- [+] ChallengeProgress - [ ] SeasonChallengeHistory - [ ] PS - [ ] ActiveDojoColorResearch diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index c9f2520b..5becaf85 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -5,8 +5,7 @@ import { Types } from "mongoose"; import { ISuitDatabase, ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes"; import { SlotType } from "@/src/types/purchaseTypes"; import { IWeaponDatabase, IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes"; -import { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase } from "@/src/types/inventoryTypes/inventoryTypes"; -import { items } from "@/static/data/items"; +import { FlavourItem, RawUpgrade, MiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; const createInventory = async (accountOwnerId: Types.ObjectId) => { try { @@ -107,12 +106,12 @@ export const addCustomization = async (customizatonName: string, accountId: stri return changedInventory.FlavourItems[flavourItemIndex].toJSON(); //mongoose bug forces as FlavourItem }; -export const missionInventoryUpdate = async (data: any, accountId: string): Promise => { - const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee } = data; +export const missionInventoryUpdate = async (data: any, accountId: string): Promise => { // TODO - add data type + const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee, RegularCredits } = data; const inventory = await getInventory(accountId); const addGearExpByCategory = (gearArray: (ISuitDatabase|IWeaponDatabase)[], category: 'Pistols'|'LongGuns'|'Melee'|'Suits') => { - gearArray.forEach(({ ItemId, XP }: any) => { + gearArray?.forEach(({ ItemId, XP }: any) => { const itemIndex = inventory[category].findIndex(i => i._id?.equals(ItemId.$oid)); if (itemIndex !== -1) { inventory[category][itemIndex].XP += XP; @@ -134,7 +133,8 @@ export const missionInventoryUpdate = async (data: any, accountId: string): Prom } }); }; - + + inventory.RegularCredits += RegularCredits||0; addGearExpByCategory(Pistols, 'Pistols'); addGearExpByCategory(LongGuns, 'LongGuns'); addGearExpByCategory(Melee, 'Melee'); -- 2.47.2 From 37bc361be057c75c18dbf2126ea127b6a9984677 Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 15:07:41 +0400 Subject: [PATCH 04/14] missionInventoryUpdate request types --- src/services/inventoryService.ts | 44 ++++++++++------- src/types/missionInventoryUpdateType.ts | 64 +++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 18 deletions(-) create mode 100644 src/types/missionInventoryUpdateType.ts diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 5becaf85..ad12c4a7 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -2,10 +2,11 @@ import { Inventory } from "@/src/models/inventoryModel"; import new_inventory from "@/static/fixed_responses/postTutorialInventory.json"; import config from "@/config.json"; import { Types } from "mongoose"; -import { ISuitDatabase, ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes"; +import { ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes"; import { SlotType } from "@/src/types/purchaseTypes"; -import { IWeaponDatabase, IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes"; -import { FlavourItem, RawUpgrade, MiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes"; +import { FlavourItem } from "@/src/types/inventoryTypes/inventoryTypes"; +import { MissionInventoryUpdate, MissionInventoryUpdateCard, MissionInventoryUpdateGear, MissionInventoryUpdateItem } from "../types/missionInventoryUpdateType"; const createInventory = async (accountOwnerId: Types.ObjectId) => { try { @@ -106,30 +107,35 @@ export const addCustomization = async (customizatonName: string, accountId: stri return changedInventory.FlavourItems[flavourItemIndex].toJSON(); //mongoose bug forces as FlavourItem }; -export const missionInventoryUpdate = async (data: any, accountId: string): Promise => { // TODO - add data type +export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accountId: string): Promise => { const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee, RegularCredits } = data; const inventory = await getInventory(accountId); - const addGearExpByCategory = (gearArray: (ISuitDatabase|IWeaponDatabase)[], category: 'Pistols'|'LongGuns'|'Melee'|'Suits') => { - gearArray?.forEach(({ ItemId, XP }: any) => { - const itemIndex = inventory[category].findIndex(i => i._id?.equals(ItemId.$oid)); - if (itemIndex !== -1) { - inventory[category][itemIndex].XP += XP; - inventory.markModified(`${category}.${itemIndex}.XP`); + const addGearExpByCategory = (gearArray: MissionInventoryUpdateGear[] | undefined, categoryName: 'Pistols'|'LongGuns'|'Melee'|'Suits') => { + const category = inventory[categoryName]; + + gearArray?.forEach(({ ItemId, XP }) => { + const itemIndex = category.findIndex(i => i._id?.equals(ItemId.$oid)); + const item = category[itemIndex]; + + if (itemIndex !== -1 && item.XP!=undefined) { + item.XP += XP; + inventory.markModified(`${categoryName}.${itemIndex}.XP`); } }); }; - const addItemsByCategory = (itemsArray: (RawUpgrade | MiscItem)[], category: 'RawUpgrades'|'MiscItems') => { - itemsArray?.forEach(item => { - const { ItemCount, ItemType } = item; - const existingItemIndex = inventory[category].findIndex(i => i.ItemType === ItemType); + const addItemsByCategory = (itemsArray: (MissionInventoryUpdateItem | MissionInventoryUpdateCard)[] | undefined, categoryName: 'RawUpgrades'|'MiscItems') => { + const category = inventory[categoryName]; + + itemsArray?.forEach(({ ItemCount, ItemType }) => { + const itemIndex = category.findIndex(i => i.ItemType === ItemType); - if (existingItemIndex !== -1) { - inventory[category][existingItemIndex].ItemCount += ItemCount; - inventory.markModified(category + '.' + existingItemIndex + '.ItemCount'); + if (itemIndex !== -1) { + category[itemIndex].ItemCount += ItemCount; + inventory.markModified(`${categoryName}.${itemIndex}.ItemCount`); } else { - inventory[category].push({ ItemCount, ItemType }); + category.push({ ItemCount, ItemType }); } }); }; @@ -142,6 +148,8 @@ export const missionInventoryUpdate = async (data: any, accountId: string): Prom addItemsByCategory(RawUpgrades, 'RawUpgrades'); // TODO - check mods fusion level addItemsByCategory(MiscItems, 'MiscItems'); + // TODO - save ChallengeProgress (idk where to save) + await inventory.save(); }; diff --git a/src/types/missionInventoryUpdateType.ts b/src/types/missionInventoryUpdateType.ts new file mode 100644 index 00000000..dcc88da0 --- /dev/null +++ b/src/types/missionInventoryUpdateType.ts @@ -0,0 +1,64 @@ +interface MongooseId{ + $oid: string; +} + +interface ExpireDate{ + $date: { + $numberLong: string; + } +} + +export interface MissionInventoryUpdateGear{ + ItemType: string; + ItemName: string; + ItemId: MongooseId; + XP: number; + UpgradeVer: number; + Features: number; + Polarized: number; + CustomizationSlotPurchases: number; + ModSlotPurchases: number; + FocusLens: string; + Expiry: ExpireDate; + Polarity: any[]; + Configs: any[]; + ModularParts: any[]; + SkillTree: string; + UpgradeType: string; + UpgradeFingerprint: string; + OffensiveUpgrade: string; + DefensiveUpgrade: string; + UpgradesExpiry: ExpireDate; + ArchonCrystalUpgrades: any[]; +} + +export interface MissionInventoryUpdateItem{ + ItemCount: number; + ItemType: string; +} + +export interface MissionInventoryUpdateCard extends MissionInventoryUpdateItem{ + ItemId: MongooseId; + UpgradeFingerprint: string; + PendingRerollFingerprint: string; + LastAdded: MongooseId; +} + +interface MissionInventoryUpdateChallange{ + Name: string; + Progress: number; + Completed: any[]; +} + +export interface MissionInventoryUpdate{ + rewardsMultiplier?: number; + ActiveBoosters?: any[]; + LongGuns?: MissionInventoryUpdateGear[]; + Pistols?: MissionInventoryUpdateGear[]; + Suits?: MissionInventoryUpdateGear[]; + Melee?: MissionInventoryUpdateGear[]; + RawUpgrades?: MissionInventoryUpdateCard[]; + MiscItems?: MissionInventoryUpdateItem[]; + RegularCredits?: number; + ChallengeProgress?: MissionInventoryUpdateChallange[]; +} \ No newline at end of file -- 2.47.2 From c57c1dfff1b1ee7ac1af70e1ea1ac7833fed20e7 Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 15:25:16 +0400 Subject: [PATCH 05/14] missionInventryUpdate - remove temp logger --- .../api/missionInventoryUpdateController.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 377072a6..898e9e3a 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -40,11 +40,11 @@ import fs from 'fs'; - [ ] FpsSamples */ const missionInventoryUpdateController: RequestHandler = async (req, res) => { - fs.writeFile("./tmp/test", req.body, function(err) { - if(err) { - return console.log(err); - } - }); + // fs.writeFile("./tmp/test", req.body, function(err) { + // if(err) { + // return console.log(err); + // } + // }); const [data, _secondIGuessIsSalt] = String(req.body).split("\n"); const id = req.query.accountId as string; -- 2.47.2 From 17ae269e006689d573874886b24775b6ee632f4d Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 15:27:19 +0400 Subject: [PATCH 06/14] remove --- src/controllers/api/missionInventoryUpdateController.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 898e9e3a..10c45b3d 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -1,6 +1,5 @@ import { RequestHandler } from "express"; import { missionInventoryUpdate } from "@/src/services/inventoryService"; -import fs from 'fs'; /* - [ ] crossPlaySetting - [ ] rewardsMultiplier @@ -40,12 +39,6 @@ import fs from 'fs'; - [ ] 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 id = req.query.accountId as string; -- 2.47.2 From 856d3c1ccb36f61fdf99765ce82ea4f5a745fd06 Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 17:32:08 +0400 Subject: [PATCH 07/14] missionInventoryUpdate - error handler --- .../api/missionInventoryUpdateController.ts | 21 +++++++++++++++++-- src/services/inventoryService.ts | 4 +++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 10c45b3d..7f30049f 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -1,5 +1,6 @@ import { RequestHandler } from "express"; import { missionInventoryUpdate } from "@/src/services/inventoryService"; +import fs from 'fs'; /* - [ ] crossPlaySetting - [ ] rewardsMultiplier @@ -39,11 +40,27 @@ import { missionInventoryUpdate } from "@/src/services/inventoryService"; - [ ] FpsSamples */ const missionInventoryUpdateController: RequestHandler = async (req, res) => { + fs.writeFile("./tmp/missionInventoryUpdate", req.body,(err)=>{ + if(err) + return console.log(err); + }); // temp log, !!! tmp folder need on main dir + const [data, _secondIGuessIsSalt] = String(req.body).split("\n"); const id = req.query.accountId as string; - - await missionInventoryUpdate(JSON.parse(data), id); + // TODO - salt check + + try { + const parsedData = JSON.parse(data); + if (typeof parsedData !== 'object' || parsedData === null) + throw new Error('Invalid data format'); + + await missionInventoryUpdate(parsedData, id); + } catch (err) { + console.error('Error parsing JSON data:', err); + } + + // TODO - get original response res.json({}); }; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index ad12c4a7..dbdd4997 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -111,6 +111,8 @@ export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accou const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee, RegularCredits } = data; const inventory = await getInventory(accountId); + // TODO - multipliers logic + const addGearExpByCategory = (gearArray: MissionInventoryUpdateGear[] | undefined, categoryName: 'Pistols'|'LongGuns'|'Melee'|'Suits') => { const category = inventory[categoryName]; @@ -127,7 +129,7 @@ export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accou const addItemsByCategory = (itemsArray: (MissionInventoryUpdateItem | MissionInventoryUpdateCard)[] | undefined, categoryName: 'RawUpgrades'|'MiscItems') => { const category = inventory[categoryName]; - + itemsArray?.forEach(({ ItemCount, ItemType }) => { const itemIndex = category.findIndex(i => i.ItemType === ItemType); -- 2.47.2 From f054db13271b1501a390c1051a7f85fff8b10174 Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 20:14:06 +0400 Subject: [PATCH 08/14] eslint --- .../api/missionInventoryUpdateController.ts | 24 +++++++------- src/controllers/stats/viewController.ts | 7 ++++ src/routes/stats.ts | 7 ++++ src/services/inventoryService.ts | 33 ++++++++++++------- 4 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 src/controllers/stats/viewController.ts diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index 7f30049f..aeea034d 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -1,6 +1,7 @@ -import { RequestHandler } from "express"; +import { Request, Response } from "express"; import { missionInventoryUpdate } from "@/src/services/inventoryService"; -import fs from 'fs'; +import fs from "fs"; +import { MissionInventoryUpdate } from "@/src/types/missionInventoryUpdateType"; /* - [ ] crossPlaySetting - [ ] rewardsMultiplier @@ -39,25 +40,22 @@ import fs from 'fs'; - [ ] FpsMax - [ ] FpsSamples */ -const missionInventoryUpdateController: RequestHandler = async (req, res) => { - fs.writeFile("./tmp/missionInventoryUpdate", req.body,(err)=>{ - if(err) - return console.log(err); - }); // temp log, !!! tmp folder need on main dir +const missionInventoryUpdateController = async (req: Request, res: Response) => { + fs.writeFile("./tmp/missionInventoryUpdate", req.body as string, err => { + if (err) return console.log(err); + }); // temp log, !!! tmp folder need on main dir - const [data, _secondIGuessIsSalt] = String(req.body).split("\n"); + const [data] = String(req.body).split("\n"); const id = req.query.accountId as string; // TODO - salt check try { - const parsedData = JSON.parse(data); - if (typeof parsedData !== 'object' || parsedData === null) - throw new Error('Invalid data format'); - + const parsedData = JSON.parse(data) as MissionInventoryUpdate; + if (typeof parsedData !== "object" || parsedData === null) throw new Error("Invalid data format"); await missionInventoryUpdate(parsedData, id); } catch (err) { - console.error('Error parsing JSON data:', err); + console.error("Error parsing JSON data:", err); } // TODO - get original response diff --git a/src/controllers/stats/viewController.ts b/src/controllers/stats/viewController.ts new file mode 100644 index 00000000..4e988ccc --- /dev/null +++ b/src/controllers/stats/viewController.ts @@ -0,0 +1,7 @@ +import { RequestHandler } from "express"; + +const viewController: RequestHandler = (_req, res) => { + res.json({}); +}; + +export { viewController }; diff --git a/src/routes/stats.ts b/src/routes/stats.ts index 96b68e13..17904ac2 100644 --- a/src/routes/stats.ts +++ b/src/routes/stats.ts @@ -1,7 +1,14 @@ +import { viewController } from "../controllers/api/viewController"; import { uploadController } from "@/src/controllers/stats/uploadController"; + import express from "express"; const statsRouter = express.Router(); +// get +statsRouter.get("/view.php", viewController); + +// post statsRouter.post("/upload.php", uploadController); + export { statsRouter }; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index dbdd4997..05c60f2f 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -6,7 +6,12 @@ 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 { MissionInventoryUpdate, MissionInventoryUpdateCard, MissionInventoryUpdateGear, MissionInventoryUpdateItem } from "../types/missionInventoryUpdateType"; +import { + MissionInventoryUpdate, + MissionInventoryUpdateCard, + MissionInventoryUpdateGear, + MissionInventoryUpdateItem +} from "../types/missionInventoryUpdateType"; const createInventory = async (accountOwnerId: Types.ObjectId) => { try { @@ -113,21 +118,27 @@ export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accou // TODO - multipliers logic - const addGearExpByCategory = (gearArray: MissionInventoryUpdateGear[] | undefined, categoryName: 'Pistols'|'LongGuns'|'Melee'|'Suits') => { + const addGearExpByCategory = ( + gearArray: MissionInventoryUpdateGear[] | undefined, + categoryName: "Pistols" | "LongGuns" | "Melee" | "Suits" + ) => { const category = inventory[categoryName]; gearArray?.forEach(({ ItemId, XP }) => { const itemIndex = category.findIndex(i => i._id?.equals(ItemId.$oid)); const item = category[itemIndex]; - if (itemIndex !== -1 && item.XP!=undefined) { + if (itemIndex !== -1 && item.XP != undefined) { item.XP += XP; inventory.markModified(`${categoryName}.${itemIndex}.XP`); } }); }; - const addItemsByCategory = (itemsArray: (MissionInventoryUpdateItem | MissionInventoryUpdateCard)[] | undefined, categoryName: 'RawUpgrades'|'MiscItems') => { + const addItemsByCategory = ( + itemsArray: (MissionInventoryUpdateItem | MissionInventoryUpdateCard)[] | undefined, + categoryName: "RawUpgrades" | "MiscItems" + ) => { const category = inventory[categoryName]; itemsArray?.forEach(({ ItemCount, ItemType }) => { @@ -142,13 +153,13 @@ export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accou }); }; - inventory.RegularCredits += RegularCredits||0; - addGearExpByCategory(Pistols, 'Pistols'); - addGearExpByCategory(LongGuns, 'LongGuns'); - addGearExpByCategory(Melee, 'Melee'); - addGearExpByCategory(Suits, 'Suits'); - addItemsByCategory(RawUpgrades, 'RawUpgrades'); // TODO - check mods fusion level - addItemsByCategory(MiscItems, 'MiscItems'); + inventory.RegularCredits += RegularCredits || 0; + addGearExpByCategory(Pistols, "Pistols"); + addGearExpByCategory(LongGuns, "LongGuns"); + addGearExpByCategory(Melee, "Melee"); + addGearExpByCategory(Suits, "Suits"); + addItemsByCategory(RawUpgrades, "RawUpgrades"); // TODO - check mods fusion level + addItemsByCategory(MiscItems, "MiscItems"); // TODO - save ChallengeProgress (idk where to save) -- 2.47.2 From a1c281572846740a031ab6baf93705a37054283f Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 21:15:46 +0400 Subject: [PATCH 09/14] missionInventoryUpdate - private functions outside --- src/services/inventoryService.ts | 86 +++++++++++----------- src/types/inventoryTypes/SuitTypes.ts | 8 +- src/types/inventoryTypes/inventoryTypes.ts | 2 +- src/types/inventoryTypes/weaponTypes.ts | 2 + 4 files changed, 53 insertions(+), 45 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 05c60f2f..d7581ab9 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, IInventoryDatabaseDocument } from "@/src/types/inventoryTypes/inventoryTypes"; import { MissionInventoryUpdate, MissionInventoryUpdateCard, @@ -112,54 +112,56 @@ export const addCustomization = async (customizatonName: string, accountId: stri return changedInventory.FlavourItems[flavourItemIndex].toJSON(); //mongoose bug forces as FlavourItem }; +const addGearExpByCategory = ( + inventory: IInventoryDatabaseDocument, + gearArray: MissionInventoryUpdateGear[] | undefined, + categoryName: "Pistols" | "LongGuns" | "Melee" | "Suits" +) => { + const category = inventory[categoryName]; + + gearArray?.forEach(({ ItemId, XP }) => { + const itemIndex = category.findIndex(i => i._id?.equals(ItemId.$oid)); + const item = category[itemIndex]; + + if (itemIndex !== -1 && item.XP != undefined) { + item.XP += XP; + inventory.markModified(`${categoryName}.${itemIndex}.XP`); + } + }); +}; + +const addItemsByCategory = ( + inventory: IInventoryDatabaseDocument, + itemsArray: (MissionInventoryUpdateItem | MissionInventoryUpdateCard)[] | undefined, + categoryName: "RawUpgrades" | "MiscItems" +) => { + const category = inventory[categoryName]; + + itemsArray?.forEach(({ ItemCount, ItemType }) => { + const itemIndex = category.findIndex(i => i.ItemType === ItemType); + + if (itemIndex !== -1) { + category[itemIndex].ItemCount += ItemCount; + inventory.markModified(`${categoryName}.${itemIndex}.ItemCount`); + } else { + category.push({ ItemCount, ItemType }); + } + }); +}; + export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accountId: string): Promise => { const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee, RegularCredits } = data; const inventory = await getInventory(accountId); // TODO - multipliers logic - const addGearExpByCategory = ( - gearArray: MissionInventoryUpdateGear[] | undefined, - categoryName: "Pistols" | "LongGuns" | "Melee" | "Suits" - ) => { - const category = inventory[categoryName]; - - gearArray?.forEach(({ ItemId, XP }) => { - const itemIndex = category.findIndex(i => i._id?.equals(ItemId.$oid)); - const item = category[itemIndex]; - - if (itemIndex !== -1 && item.XP != undefined) { - item.XP += XP; - inventory.markModified(`${categoryName}.${itemIndex}.XP`); - } - }); - }; - - const addItemsByCategory = ( - itemsArray: (MissionInventoryUpdateItem | MissionInventoryUpdateCard)[] | undefined, - categoryName: "RawUpgrades" | "MiscItems" - ) => { - const category = inventory[categoryName]; - - itemsArray?.forEach(({ ItemCount, ItemType }) => { - const itemIndex = category.findIndex(i => i.ItemType === ItemType); - - if (itemIndex !== -1) { - category[itemIndex].ItemCount += ItemCount; - inventory.markModified(`${categoryName}.${itemIndex}.ItemCount`); - } else { - category.push({ ItemCount, ItemType }); - } - }); - }; - inventory.RegularCredits += RegularCredits || 0; - addGearExpByCategory(Pistols, "Pistols"); - addGearExpByCategory(LongGuns, "LongGuns"); - addGearExpByCategory(Melee, "Melee"); - addGearExpByCategory(Suits, "Suits"); - addItemsByCategory(RawUpgrades, "RawUpgrades"); // TODO - check mods fusion level - addItemsByCategory(MiscItems, "MiscItems"); + addGearExpByCategory(inventory, Pistols, "Pistols"); + addGearExpByCategory(inventory, LongGuns, "LongGuns"); + addGearExpByCategory(inventory, Melee, "Melee"); + addGearExpByCategory(inventory, Suits, "Suits"); + addItemsByCategory(inventory, RawUpgrades, "RawUpgrades"); // TODO - check mods fusion level + addItemsByCategory(inventory, MiscItems, "MiscItems"); // TODO - save ChallengeProgress (idk where to save) diff --git a/src/types/inventoryTypes/SuitTypes.ts b/src/types/inventoryTypes/SuitTypes.ts index 187d5ab1..7dc8ca5f 100644 --- a/src/types/inventoryTypes/SuitTypes.ts +++ b/src/types/inventoryTypes/SuitTypes.ts @@ -1,8 +1,11 @@ import { Oid } from "@/src/types/commonTypes"; import { AbilityOverride, Color, Polarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { Document } from "mongoose"; +import { Document, Types } from "mongoose"; -export interface ISuitDocument extends ISuitResponse, Document {} +// export interface ISuitDocument extends ISuitResponse, Document {} +export interface ISuitDocument extends Document, ISuitResponse { + _id: Types.ObjectId; +} export interface ISuitResponse extends ISuitDatabase { ItemId: Oid; @@ -20,6 +23,7 @@ export interface ISuitDatabase { ModSlotPurchases?: number; FocusLens?: string; UnlockLevel?: number; + _id: Types.ObjectId; } export interface SuitConfig { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 0e095a88..b175dc64 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -929,7 +929,7 @@ export interface Progress { export interface RawUpgrade { ItemCount: number; - LastAdded: Oid; + LastAdded?: Oid; ItemType: string; } diff --git a/src/types/inventoryTypes/weaponTypes.ts b/src/types/inventoryTypes/weaponTypes.ts index 3c561e2d..7fe6bf40 100644 --- a/src/types/inventoryTypes/weaponTypes.ts +++ b/src/types/inventoryTypes/weaponTypes.ts @@ -1,5 +1,6 @@ import { Oid } from "@/src/types/commonTypes"; import { Color, Polarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { Types } from "mongoose"; export interface IWeaponResponse extends IWeaponDatabase { ItemId: Oid; @@ -20,6 +21,7 @@ export interface IWeaponDatabase { ItemName?: string; ModularParts?: string[]; UnlockLevel?: number; + _id?: Types.ObjectId; } export interface WeaponConfig { -- 2.47.2 From 4c8536a339384488184d275a9a3c903da608b969 Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 22:56:50 +0400 Subject: [PATCH 10/14] MissionInventoryUpdate - challenges --- .../api/missionInventoryUpdateController.ts | 9 +++----- src/services/inventoryService.ts | 22 +++++++++++++++---- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index aeea034d..de7ae822 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -1,6 +1,5 @@ -import { Request, Response } from "express"; +import { RequestHandler } from "express"; import { missionInventoryUpdate } from "@/src/services/inventoryService"; -import fs from "fs"; import { MissionInventoryUpdate } from "@/src/types/missionInventoryUpdateType"; /* - [ ] crossPlaySetting @@ -40,11 +39,9 @@ import { MissionInventoryUpdate } from "@/src/types/missionInventoryUpdateType"; - [ ] FpsMax - [ ] FpsSamples */ -const missionInventoryUpdateController = async (req: Request, res: Response) => { - fs.writeFile("./tmp/missionInventoryUpdate", req.body as string, err => { - if (err) return console.log(err); - }); // temp log, !!! tmp folder need on main dir +// eslint-disable-next-line @typescript-eslint/no-misused-promises +const missionInventoryUpdateController: RequestHandler = async (req, res) => { const [data] = String(req.body).split("\n"); const id = req.query.accountId as string; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index d7581ab9..1b99507e 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, IInventoryDatabaseDocument } from "@/src/types/inventoryTypes/inventoryTypes"; +import { ChallengeProgress, FlavourItem, IInventoryDatabaseDocument } from "@/src/types/inventoryTypes/inventoryTypes"; import { MissionInventoryUpdate, MissionInventoryUpdateCard, @@ -149,8 +149,23 @@ const addItemsByCategory = ( }); }; +const addChallenges = (inventory: IInventoryDatabaseDocument, itemsArray: ChallengeProgress[] | undefined) => { + const category = inventory.ChallengeProgress; + + itemsArray?.forEach(({ Name, Progress }) => { + const itemIndex = category.findIndex(i => i.Name === Name); + + if (itemIndex !== -1) { + category[itemIndex].Progress += Progress; + inventory.markModified(`ChallengeProgress.${itemIndex}.ItemCount`); + } else { + category.push({ Name, Progress }); + } + }); +}; + export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accountId: string): Promise => { - const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee, RegularCredits } = data; + const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee, RegularCredits, ChallengeProgress } = data; const inventory = await getInventory(accountId); // TODO - multipliers logic @@ -162,8 +177,7 @@ export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accou addGearExpByCategory(inventory, Suits, "Suits"); addItemsByCategory(inventory, RawUpgrades, "RawUpgrades"); // TODO - check mods fusion level addItemsByCategory(inventory, MiscItems, "MiscItems"); - - // TODO - save ChallengeProgress (idk where to save) + addChallenges(inventory, ChallengeProgress); await inventory.save(); }; -- 2.47.2 From bfdc6bfaffed147ee0b511ed0dab11eb99120d0a Mon Sep 17 00:00:00 2001 From: holmityd Date: Wed, 30 Aug 2023 23:50:52 +0400 Subject: [PATCH 11/14] missionInventoryUpdate - dynamic gear update calls --- .../api/missionInventoryUpdateController.ts | 2 +- src/services/inventoryService.ts | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/controllers/api/missionInventoryUpdateController.ts b/src/controllers/api/missionInventoryUpdateController.ts index de7ae822..bde878af 100644 --- a/src/controllers/api/missionInventoryUpdateController.ts +++ b/src/controllers/api/missionInventoryUpdateController.ts @@ -23,7 +23,7 @@ import { MissionInventoryUpdate } from "@/src/types/missionInventoryUpdateType"; - [ ] LastRegionPlayed - [ ] GameModeId - [ ] hosts -- [+] ChallengeProgress +- [x] ChallengeProgress - [ ] SeasonChallengeHistory - [ ] PS - [ ] ActiveDojoColorResearch diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 1b99507e..9f4ff713 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -164,17 +164,21 @@ const addChallenges = (inventory: IInventoryDatabaseDocument, itemsArray: Challe }); }; +const gearKeys = ["Suits", "Pistols", "LongGuns", "Melee"] as const; +type GearKeysType = (typeof gearKeys)[number]; + export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accountId: string): Promise => { - const { RawUpgrades, MiscItems, Suits, Pistols, LongGuns, Melee, RegularCredits, ChallengeProgress } = data; + const { RawUpgrades, MiscItems, RegularCredits, ChallengeProgress } = data; const inventory = await getInventory(accountId); // TODO - multipliers logic - + // credits inventory.RegularCredits += RegularCredits || 0; - addGearExpByCategory(inventory, Pistols, "Pistols"); - addGearExpByCategory(inventory, LongGuns, "LongGuns"); - addGearExpByCategory(inventory, Melee, "Melee"); - addGearExpByCategory(inventory, Suits, "Suits"); + + // gear exp + gearKeys.forEach((key: GearKeysType) => addGearExpByCategory(inventory, data[key], key)); + + // other addItemsByCategory(inventory, RawUpgrades, "RawUpgrades"); // TODO - check mods fusion level addItemsByCategory(inventory, MiscItems, "MiscItems"); addChallenges(inventory, ChallengeProgress); -- 2.47.2 From 5facad179cf00579011e5232ec9fb0ddc467ed9b Mon Sep 17 00:00:00 2001 From: holmityd Date: Thu, 31 Aug 2023 01:20:37 +0400 Subject: [PATCH 12/14] Booster purchase --- src/models/inventoryModel.ts | 10 ++++++++-- src/services/inventoryService.ts | 26 ++++++++++++++++++++++++++ src/services/purchaseService.ts | 23 +++++++++++++++-------- 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/models/inventoryModel.ts b/src/models/inventoryModel.ts index 0b7f52d6..f73dd1fb 100644 --- a/src/models/inventoryModel.ts +++ b/src/models/inventoryModel.ts @@ -1,5 +1,5 @@ import { Model, Schema, Types, model } from "mongoose"; -import { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase } from "../types/inventoryTypes/inventoryTypes"; +import { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase, Booster } from "../types/inventoryTypes/inventoryTypes"; import { Oid } from "../types/commonTypes"; import { ISuitDatabase, ISuitDocument } from "@/src/types/inventoryTypes/SuitTypes"; import { IWeaponDatabase } from "@/src/types/inventoryTypes/weaponTypes"; @@ -66,6 +66,11 @@ const WeaponSchema = new Schema({ UnlockLevel: Number }); +const BoosterSchema = new Schema({ + ExpiryDate: Number, + ItemType: String +}); + WeaponSchema.set("toJSON", { transform(_document, returnedObject) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call @@ -213,7 +218,7 @@ const inventorySchema = new Schema({ LoreFragmentScans: [Schema.Types.Mixed], EquippedEmotes: [String], PendingTrades: [Schema.Types.Mixed], - Boosters: [Schema.Types.Mixed], + Boosters: [BoosterSchema], ActiveDojoColorResearch: String, SentientSpawnChanceBoosters: Schema.Types.Mixed, Affiliations: [Schema.Types.Mixed], @@ -336,6 +341,7 @@ type InventoryDocumentProps = { FlavourItems: Types.DocumentArray; RawUpgrades: Types.DocumentArray; MiscItems: Types.DocumentArray; + Boosters: Types.DocumentArray; }; type InventoryModelType = Model; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 9f4ff713..39ca196f 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -186,4 +186,30 @@ export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accou await inventory.save(); }; +export const addBooster = async (boosterName: string, accountId: string): Promise => { + const match = boosterName.match(/(\d+)Day/); + if (!match) return; + + const extractedDigit = Number(match[1]); + const ItemType = boosterName.replace(`${extractedDigit}Day`, ""); + const plusTime = 86400 * extractedDigit; + const currentTime = Math.floor(Date.now() / 1000); + + const inventory = await getInventory(accountId); + const { Boosters } = inventory; + + let itemIndex = Boosters.findIndex(i => i.ItemType === ItemType); + + if (itemIndex !== -1) { + const existingBooster = Boosters[itemIndex]; + existingBooster.ExpiryDate = Math.max(existingBooster.ExpiryDate, currentTime) + plusTime; + inventory.markModified(`Boosters.${itemIndex}.ExpiryDate`); + } else { + itemIndex = Boosters.push({ ItemType, ExpiryDate: currentTime + plusTime }) - 1; + } + + const changedInventory = await inventory.save(); + return changedInventory.Boosters[itemIndex].toJSON(); +}; + export { createInventory, addPowerSuit }; diff --git a/src/services/purchaseService.ts b/src/services/purchaseService.ts index 16716573..5c002a0b 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -1,13 +1,7 @@ import { getWeaponType } from "@/src/helpers/purchaseHelpers"; import { getSubstringFromKeyword } from "@/src/helpers/stringHelpers"; -import { - addCustomization, - addPowerSuit, - addWeapon, - updateCurrency, - updateSlots -} from "@/src/services/inventoryService"; -import { IPurchaseRequest, IPurchaseResponse, SlotType } from "@/src/types/purchaseTypes"; +import { addBooster, addCustomization, addPowerSuit, addWeapon, updateSlots } from "@/src/services/inventoryService"; +import { IPurchaseRequest, SlotType } from "@/src/types/purchaseTypes"; export const getStoreItemCategory = (storeItem: string) => { const storeItemString = getSubstringFromKeyword(storeItem, "StoreItems/"); @@ -41,6 +35,9 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI case "Types": purchaseResponse = await handleTypesPurchase(internalName, accountId); break; + case "Boosters": + purchaseResponse = await handleBoostersPurchase(internalName, accountId); + break; default: throw new Error(`unknown store category: ${storeCategory} not implemented or new`); @@ -114,3 +111,13 @@ const handleSuitCustomizationsPurchase = async (customizationName: string, accou } }; }; + +const handleBoostersPurchase = async (boosterName: string, accountId: string) => { + const addedBooster = await addBooster(boosterName, accountId); + + return { + InventoryChanges: { + Boosters: [addedBooster] + } + }; +}; -- 2.47.2 From c7756f63fb3f6636a9c9cb4ee92629ab70b6eca3 Mon Sep 17 00:00:00 2001 From: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com> Date: Wed, 30 Aug 2023 23:36:40 +0200 Subject: [PATCH 13/14] Update src/routes/stats.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ângelo Tadeucci --- src/routes/stats.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/routes/stats.ts b/src/routes/stats.ts index 17904ac2..a0df739f 100644 --- a/src/routes/stats.ts +++ b/src/routes/stats.ts @@ -5,10 +5,7 @@ import express from "express"; const statsRouter = express.Router(); -// get statsRouter.get("/view.php", viewController); - -// post statsRouter.post("/upload.php", uploadController); export { statsRouter }; -- 2.47.2 From bd79fee02f9526c2881b84f604ae0d92c8395181 Mon Sep 17 00:00:00 2001 From: holmityd Date: Thu, 31 Aug 2023 12:50:48 +0400 Subject: [PATCH 14/14] Booster purchase fix --- src/services/inventoryService.ts | 19 ++++++------------- src/services/purchaseService.ts | 22 +++++++++++++++++++--- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 39ca196f..19900497 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -186,30 +186,23 @@ export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accou await inventory.save(); }; -export const addBooster = async (boosterName: string, accountId: string): Promise => { - const match = boosterName.match(/(\d+)Day/); - if (!match) return; - - const extractedDigit = Number(match[1]); - const ItemType = boosterName.replace(`${extractedDigit}Day`, ""); - const plusTime = 86400 * extractedDigit; - const currentTime = Math.floor(Date.now() / 1000); +export const addBooster = async (ItemType: string, time: number, accountId: string): Promise => { + const currentTime = Math.floor(Date.now() / 1000) - 129600; // booster time getting more without 129600, probably defence logic, idk const inventory = await getInventory(accountId); const { Boosters } = inventory; - let itemIndex = Boosters.findIndex(i => i.ItemType === ItemType); + const itemIndex = Boosters.findIndex(i => i.ItemType === ItemType); if (itemIndex !== -1) { const existingBooster = Boosters[itemIndex]; - existingBooster.ExpiryDate = Math.max(existingBooster.ExpiryDate, currentTime) + plusTime; + existingBooster.ExpiryDate = Math.max(existingBooster.ExpiryDate, currentTime) + time; inventory.markModified(`Boosters.${itemIndex}.ExpiryDate`); } else { - itemIndex = Boosters.push({ ItemType, ExpiryDate: currentTime + plusTime }) - 1; + Boosters.push({ ItemType, ExpiryDate: currentTime + time }) - 1; } - const changedInventory = await inventory.save(); - return changedInventory.Boosters[itemIndex].toJSON(); + await inventory.save(); }; export { createInventory, addPowerSuit }; diff --git a/src/services/purchaseService.ts b/src/services/purchaseService.ts index 5c002a0b..8b88cd86 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -112,12 +112,28 @@ const handleSuitCustomizationsPurchase = async (customizationName: string, accou }; }; -const handleBoostersPurchase = async (boosterName: string, accountId: string) => { - const addedBooster = await addBooster(boosterName, accountId); +const boosterCollection = [ + "/Lotus/Types/Boosters/ResourceAmountBooster", + "/Lotus/Types/Boosters/AffinityBooster", + "/Lotus/Types/Boosters/ResourceDropChanceBooster", + "/Lotus/Types/Boosters/CreditBooster" +]; + +const handleBoostersPurchase = async (boosterStoreName: string, accountId: string) => { + const match = boosterStoreName.match(/(\d+)Day/); + if (!match) return; + + const extractedDigit = Number(match[1]); + const ItemType = boosterCollection.find(i => + boosterStoreName.includes(i.split("/").pop()!.replace("Booster", "")) + )!; + const ExpiryDate = extractedDigit * 86400; + + await addBooster(ItemType, ExpiryDate, accountId); return { InventoryChanges: { - Boosters: [addedBooster] + Boosters: [{ ItemType, ExpiryDate }] } }; }; -- 2.47.2