From de02dadfc6a8a2e6e40a8196ae7d6a0593c6cf95 Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 3 Jan 2025 05:28:21 +0100 Subject: [PATCH] chore: replace IInventoryDatabaseDocument with TInventoryDatabaseDocument which correctly models the return value of 'getInventory' --- .../api/infestedFoundryController.ts | 11 +++----- src/controllers/api/inventoryController.ts | 6 ++--- src/models/inventoryModels/inventoryModel.ts | 14 +++++++++- src/services/guildService.ts | 4 +-- src/services/inventoryService.ts | 27 +++++++++---------- src/types/inventoryTypes/inventoryTypes.ts | 2 -- 6 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index a01ae16b..74ff3f35 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -3,15 +3,10 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getInventory, addMiscItems, updateCurrency, addRecipes } from "@/src/services/inventoryService"; import { IOid } from "@/src/types/commonTypes"; -import { - IConsumedSuit, - IInfestedFoundry, - IInventoryDatabaseDocument, - IMiscItem, - ITypeCount -} from "@/src/types/inventoryTypes/inventoryTypes"; +import { IConsumedSuit, IInfestedFoundry, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; import { ExportMisc, ExportRecipes } from "warframe-public-export-plus"; import { getRecipe } from "@/src/services/itemDataService"; +import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; export const infestedFoundryController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -239,7 +234,7 @@ interface IHelminthSubsumeRequest { Recipe: string; } -export const handleSubsumeCompletion = (inventory: IInventoryDatabaseDocument): ITypeCount[] => { +export const handleSubsumeCompletion = (inventory: TInventoryDatabaseDocument): ITypeCount[] => { const [recipeType] = Object.entries(ExportRecipes).find( ([_recipeType, recipe]) => recipe.secretIngredientAction == "SIA_WARFRAME_ABILITY" && diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index f38fe0ec..03c1b757 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -1,11 +1,11 @@ import { RequestHandler } from "express"; import { getAccountForRequest } from "@/src/services/loginService"; import { toInventoryResponse } from "@/src/helpers/inventoryHelpers"; -import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; +import { Inventory, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { config } from "@/src/services/configService"; import allDialogue from "@/static/fixed_responses/allDialogue.json"; import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes"; -import { IInventoryDatabaseDocument, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; +import { IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes"; import { IPolarity, ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { ExportCustoms, @@ -63,7 +63,7 @@ export const inventoryController: RequestHandler = async (request, response) => inventory.InfestedFoundry.AbilityOverrideUnlockCooldown && new Date() >= inventory.InfestedFoundry.AbilityOverrideUnlockCooldown ) { - handleSubsumeCompletion(inventory as unknown as IInventoryDatabaseDocument); + handleSubsumeCompletion(inventory as unknown as TInventoryDatabaseDocument); await inventory.save(); } diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 37a674c2..cc04b849 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -1,4 +1,4 @@ -import { Model, Schema, Types, model } from "mongoose"; +import { Document, Model, Schema, Types, model } from "mongoose"; import { IFlavourItem, IRawUpgrade, @@ -1114,3 +1114,15 @@ type InventoryDocumentProps = { type InventoryModelType = Model; export const Inventory = model("Inventory", inventorySchema); + +// eslint-disable-next-line @typescript-eslint/ban-types +export type TInventoryDatabaseDocument = Document & + Omit< + IInventoryDatabase & { + _id: Types.ObjectId; + } & { + __v: number; + }, + keyof InventoryDocumentProps + > & + InventoryDocumentProps; diff --git a/src/services/guildService.ts b/src/services/guildService.ts index dda01ef8..1fcddad4 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -2,7 +2,7 @@ import { Request } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getInventory } from "@/src/services/inventoryService"; import { Guild } from "@/src/models/guildModel"; -import { IInventoryDatabaseDocument } from "../types/inventoryTypes/inventoryTypes"; +import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; export const getGuildForRequest = async (req: Request) => { const accountId = await getAccountIdForRequest(req); @@ -10,7 +10,7 @@ export const getGuildForRequest = async (req: Request) => { return await getGuildForRequestEx(req, inventory); }; -export const getGuildForRequestEx = async (req: Request, inventory: IInventoryDatabaseDocument) => { +export const getGuildForRequestEx = async (req: Request, inventory: TInventoryDatabaseDocument) => { const guildId = req.query.guildId as string; if (!inventory.GuildId || inventory.GuildId.toString() != guildId) { throw new Error("Account is not in the guild that it has sent a request for"); diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 1265e802..8a6323ea 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1,4 +1,4 @@ -import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; +import { Inventory, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import postTutorialInventory from "@/static/fixed_responses/postTutorialInventory.json"; import { config } from "@/src/services/configService"; import { Types } from "mongoose"; @@ -7,7 +7,6 @@ import { IChallengeProgress, IConsumable, IFlavourItem, - IInventoryDatabaseDocument, IMiscItem, IMission, IRawUpgrade, @@ -95,7 +94,7 @@ export const combineInventoryChanges = (InventoryChanges: IInventoryChanges, del } }; -export const getInventory = async (accountOwnerId: string) => { +export const getInventory = async (accountOwnerId: string): Promise => { const inventory = await Inventory.findOne({ accountOwnerId: accountOwnerId }); if (!inventory) { @@ -485,7 +484,7 @@ const isCurrencyTracked = (usePremium: boolean): boolean => { }; export const updateCurrency = ( - inventory: IInventoryDatabaseDocument, + inventory: TInventoryDatabaseDocument, price: number, usePremium: boolean ): ICurrencyChanges => { @@ -590,7 +589,7 @@ const addCrewShip = async (typeName: string, accountId: string) => { }; const addGearExpByCategory = ( - inventory: IInventoryDatabaseDocument, + inventory: TInventoryDatabaseDocument, gearArray: IEquipmentClient[] | undefined, categoryName: TEquipmentKey ): void => { @@ -622,7 +621,7 @@ const addGearExpByCategory = ( }); }; -export const addMiscItems = (inventory: IInventoryDatabaseDocument, itemsArray: IMiscItem[] | undefined): void => { +export const addMiscItems = (inventory: TInventoryDatabaseDocument, itemsArray: IMiscItem[] | undefined): void => { const { MiscItems } = inventory; itemsArray?.forEach(({ ItemCount, ItemType }) => { @@ -638,7 +637,7 @@ export const addMiscItems = (inventory: IInventoryDatabaseDocument, itemsArray: }; export const addShipDecorations = ( - inventory: IInventoryDatabaseDocument, + inventory: TInventoryDatabaseDocument, itemsArray: IConsumable[] | undefined ): void => { const { ShipDecorations } = inventory; @@ -655,7 +654,7 @@ export const addShipDecorations = ( }); }; -export const addConsumables = (inventory: IInventoryDatabaseDocument, itemsArray: IConsumable[] | undefined): void => { +export const addConsumables = (inventory: TInventoryDatabaseDocument, itemsArray: IConsumable[] | undefined): void => { const { Consumables } = inventory; itemsArray?.forEach(({ ItemCount, ItemType }) => { @@ -670,7 +669,7 @@ export const addConsumables = (inventory: IInventoryDatabaseDocument, itemsArray }); }; -export const addRecipes = (inventory: IInventoryDatabaseDocument, itemsArray: ITypeCount[] | undefined): void => { +export const addRecipes = (inventory: TInventoryDatabaseDocument, itemsArray: ITypeCount[] | undefined): void => { const { Recipes } = inventory; itemsArray?.forEach(({ ItemCount, ItemType }) => { @@ -685,7 +684,7 @@ export const addRecipes = (inventory: IInventoryDatabaseDocument, itemsArray: IT }); }; -export const addMods = (inventory: IInventoryDatabaseDocument, itemsArray: IRawUpgrade[] | undefined): void => { +export const addMods = (inventory: TInventoryDatabaseDocument, itemsArray: IRawUpgrade[] | undefined): void => { const { RawUpgrades } = inventory; itemsArray?.forEach(({ ItemType, ItemCount }) => { const itemIndex = RawUpgrades.findIndex(i => i.ItemType === ItemType); @@ -700,7 +699,7 @@ export const addMods = (inventory: IInventoryDatabaseDocument, itemsArray: IRawU }; export const addFusionTreasures = ( - inventory: IInventoryDatabaseDocument, + inventory: TInventoryDatabaseDocument, itemsArray: IFusionTreasure[] | undefined ): void => { const { FusionTreasures } = inventory; @@ -729,7 +728,7 @@ export const updateChallengeProgress = async ( }; export const addSeasonalChallengeHistory = ( - inventory: IInventoryDatabaseDocument, + inventory: TInventoryDatabaseDocument, itemsArray: ISeasonChallenge[] | undefined ): void => { const category = inventory.SeasonChallengeHistory; @@ -746,7 +745,7 @@ export const addSeasonalChallengeHistory = ( }; export const addChallenges = ( - inventory: IInventoryDatabaseDocument, + inventory: TInventoryDatabaseDocument, itemsArray: IChallengeProgress[] | undefined ): void => { const category = inventory.ChallengeProgress; @@ -763,7 +762,7 @@ export const addChallenges = ( }); }; -const addMissionComplete = (inventory: IInventoryDatabaseDocument, { Tag, Completes }: IMission): void => { +const addMissionComplete = (inventory: TInventoryDatabaseDocument, { Tag, Completes }: IMission): void => { const { Missions } = inventory; const itemIndex = Missions.findIndex(item => item.Tag === Tag); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index d608a232..6d6dd9bc 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -10,8 +10,6 @@ import { IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes"; -//Document extends will be deleted soon. TODO: delete and migrate uses to ... -export interface IInventoryDatabaseDocument extends IInventoryDatabase, Document {} export interface IInventoryDatabase extends Omit< IInventoryResponse,