From 5a20c708f36dabf196092bd4448972db1c040cec Mon Sep 17 00:00:00 2001 From: Sainan Date: Sat, 11 Jan 2025 12:48:19 +0100 Subject: [PATCH 1/2] fix: make crew member slots optional it is possible to e.g. only have 2/3 crew members active, then one of the slots is simply absent. --- src/models/inventoryModels/inventoryModel.ts | 24 ++++++++++---------- src/types/inventoryTypes/inventoryTypes.ts | 12 +++++++--- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 964c89eb..5d490b7a 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -46,7 +46,8 @@ import { ICrewShip, ICrewShipPilotWeapon, IShipExterior, - IHelminthFoodRecord + IHelminthFoodRecord, + ICrewShipMembersDatabase } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -670,23 +671,22 @@ const crewShipCustomizationSchema = new Schema( { _id: false } ); -const crewShipMembersSchema = new Schema( +const crewShipMembersSchema = new Schema( { - SLOT_A: Schema.Types.ObjectId, - SLOT_B: Schema.Types.ObjectId, - SLOT_C: Schema.Types.ObjectId + SLOT_A: { type: Schema.Types.ObjectId, required: false }, + SLOT_B: { type: Schema.Types.ObjectId, required: false }, + SLOT_C: { type: Schema.Types.ObjectId, required: false } }, { _id: false } ); crewShipMembersSchema.set("toJSON", { virtuals: true, - transform(_doc, ret) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - ret.SLOT_A = { ItemId: toOid(ret.SLOT_A) }; - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - ret.SLOT_B = { ItemId: toOid(ret.SLOT_B) }; - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - ret.SLOT_C = { ItemId: toOid(ret.SLOT_C) }; + transform(_doc, obj) { + const db = obj as ICrewShipMembersDatabase; + const client = obj as ICrewShipMembers; + client.SLOT_A = db.SLOT_A ? { ItemId: toOid(db.SLOT_A) } : undefined; + client.SLOT_B = db.SLOT_B ? { ItemId: toOid(db.SLOT_B) } : undefined; + client.SLOT_C = db.SLOT_C ? { ItemId: toOid(db.SLOT_C) } : undefined; } }); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 89088da2..156515c0 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -432,15 +432,21 @@ export interface ICrewShip { } export interface ICrewShipMembers { - SLOT_A: ISlot; - SLOT_B: ISlot; - SLOT_C: ISlot; + SLOT_A?: ISlot; + SLOT_B?: ISlot; + SLOT_C?: ISlot; } export interface ISlot { ItemId: IOid; } +export interface ICrewShipMembersDatabase { + SLOT_A?: Types.ObjectId; + SLOT_B?: Types.ObjectId; + SLOT_C?: Types.ObjectId; +} + export interface ICrewShipCustomization { CrewshipInterior: IShipExterior; } -- 2.47.2 From 6e1debdf79da13e198c58c3a628f6611c73294da Mon Sep 17 00:00:00 2001 From: Sainan Date: Sat, 11 Jan 2025 23:00:19 +0100 Subject: [PATCH 2/2] Rename ICrewShipMembers to ICrewShipMembersClient --- src/models/inventoryModels/inventoryModel.ts | 4 ++-- src/types/inventoryTypes/inventoryTypes.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 5d490b7a..65a5d3d2 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -42,7 +42,7 @@ import { ICrewShipPortGuns, ICrewShipCustomization, ICrewShipWeapon, - ICrewShipMembers, + ICrewShipMembersClient, ICrewShip, ICrewShipPilotWeapon, IShipExterior, @@ -683,7 +683,7 @@ crewShipMembersSchema.set("toJSON", { virtuals: true, transform(_doc, obj) { const db = obj as ICrewShipMembersDatabase; - const client = obj as ICrewShipMembers; + const client = obj as ICrewShipMembersClient; client.SLOT_A = db.SLOT_A ? { ItemId: toOid(db.SLOT_A) } : undefined; client.SLOT_B = db.SLOT_B ? { ItemId: toOid(db.SLOT_B) } : undefined; client.SLOT_C = db.SLOT_C ? { ItemId: toOid(db.SLOT_C) } : undefined; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 156515c0..0b5af503 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -426,12 +426,12 @@ export interface ICrewShip { Customization?: ICrewShipCustomization; ItemName: string; RailjackImage?: IFlavourItem; - CrewMembers?: ICrewShipMembers; + CrewMembers?: ICrewShipMembersClient; ItemId: IOid; _id: Types.ObjectId; } -export interface ICrewShipMembers { +export interface ICrewShipMembersClient { SLOT_A?: ISlot; SLOT_B?: ISlot; SLOT_C?: ISlot; -- 2.47.2