diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 75a094f6..276e2321 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -41,7 +41,6 @@ import { ICrewShipPortGuns, ICrewShipCustomization, ICrewShipWeapon, - ICrewShipMembersClient, ICrewShipPilotWeapon, IShipExterior, IHelminthFoodRecord, @@ -52,7 +51,9 @@ import { ICompletedDialogue, IDialogueClient, IUpgradeDatabase, - ICrewShipDatabase + ICrewShipDatabase, + ICrewShipMemberDatabase, + ICrewShipMemberClient } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -675,25 +676,33 @@ const crewShipCustomizationSchema = new Schema( { _id: false } ); -const crewShipMembersSchema = new Schema( +const crewShipMemberSchema = new Schema( { - SLOT_A: { type: Schema.Types.ObjectId, required: false }, - SLOT_B: { type: Schema.Types.ObjectId, required: false }, - SLOT_C: { type: Schema.Types.ObjectId, required: false } + ItemId: { type: Schema.Types.ObjectId, required: false }, + NemesisFingerprint: { type: Number, required: false } }, { _id: false } ); -crewShipMembersSchema.set("toJSON", { +crewShipMemberSchema.set("toJSON", { virtuals: true, transform(_doc, obj) { - const db = obj as ICrewShipMembersDatabase; - 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; + const db = obj as ICrewShipMemberDatabase; + const client = obj as ICrewShipMemberClient; + if (db.ItemId) { + client.ItemId = toOid(db.ItemId); + } } }); +const crewShipMembersSchema = new Schema( + { + SLOT_A: { type: crewShipMemberSchema, required: false }, + SLOT_B: { type: crewShipMemberSchema, required: false }, + SLOT_C: { type: crewShipMemberSchema, required: false } + }, + { _id: false } +); + const crewShipSchema = new Schema({ ItemType: { type: String, required: true }, Configs: { type: [ItemConfigSchema], default: [] }, diff --git a/src/services/importService.ts b/src/services/importService.ts index 91857653..84f73670 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -10,6 +10,8 @@ import { equipmentKeys, ICrewShipClient, ICrewShipDatabase, + ICrewShipMemberClient, + ICrewShipMemberDatabase, ICrewShipMembersClient, ICrewShipMembersDatabase, IDialogueClient, @@ -85,11 +87,18 @@ const replaceSlots = (db: ISlots, client: ISlots): void => { db.Slots = client.Slots; }; +const convertCrewShipMember = (client: ICrewShipMemberClient): ICrewShipMemberDatabase => { + return { + ...client, + ItemId: client.ItemId ? new Types.ObjectId(client.ItemId.$oid) : undefined + }; +}; + const convertCrewShipMembers = (client: ICrewShipMembersClient): ICrewShipMembersDatabase => { return { - SLOT_A: client.SLOT_A ? new Types.ObjectId(client.SLOT_A.ItemId.$oid) : undefined, - SLOT_B: client.SLOT_B ? new Types.ObjectId(client.SLOT_B.ItemId.$oid) : undefined, - SLOT_C: client.SLOT_C ? new Types.ObjectId(client.SLOT_C.ItemId.$oid) : undefined + SLOT_A: client.SLOT_A ? convertCrewShipMember(client.SLOT_A) : undefined, + SLOT_B: client.SLOT_B ? convertCrewShipMember(client.SLOT_B) : undefined, + SLOT_C: client.SLOT_C ? convertCrewShipMember(client.SLOT_C) : undefined }; }; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index e0e446f9..3c2cf582 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -471,19 +471,25 @@ export interface ICrewShipDatabase extends Omit