diff --git a/src/controllers/api/getShipController.ts b/src/controllers/api/getShipController.ts index 8645e976..5d3689d6 100644 --- a/src/controllers/api/getShipController.ts +++ b/src/controllers/api/getShipController.ts @@ -8,19 +8,21 @@ import { Loadout } from "@/src/models/inventoryModels/loadoutModel"; import { logger } from "@/src/utils/logger"; import { toOid } from "@/src/helpers/inventoryHelpers"; import { IGetShipResponse } from "@/src/types/shipTypes"; +import { IPersonalRooms } from "@/src/types/personalRoomsTypes"; export const getShipController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); - const personalRooms = await getPersonalRooms(accountId); + const personalRoomsDb = await getPersonalRooms(accountId); + const personalRooms = personalRoomsDb.toJSON(); const loadout = await getLoadout(accountId); - const ship = await getShip(personalRooms.activeShipId, "ShipInteriorColors ShipAttachments SkinFlavourItem"); + const ship = await getShip(personalRoomsDb.activeShipId, "ShipInteriorColors ShipAttachments SkinFlavourItem"); const getShipResponse: IGetShipResponse = { ShipOwnerId: accountId, LoadOutInventory: { LoadOutPresets: loadout.toJSON() }, Ship: { - ...personalRooms.toJSON().Ship, - ShipId: toOid(personalRooms.activeShipId), + ...personalRooms.Ship, + ShipId: toOid(personalRoomsDb.activeShipId), ShipInterior: { Colors: ship.ShipInteriorColors, ShipAttachments: ship.ShipAttachments, diff --git a/src/helpers/inventoryHelpers.ts b/src/helpers/inventoryHelpers.ts index 9c254fbe..4a48474f 100644 --- a/src/helpers/inventoryHelpers.ts +++ b/src/helpers/inventoryHelpers.ts @@ -9,7 +9,7 @@ export const toInventoryResponse = (inventoryDatabase: { accountOwnerId: Types.O return inventoryResponse as unknown as IInventoryResponse; }; -export const toOid = (objectId: Types.ObjectId) => { +export const toOid = (objectId: Types.ObjectId): IOid => { return { $oid: objectId.toString() } satisfies IOid; }; diff --git a/src/models/personalRoomsModel.ts b/src/models/personalRoomsModel.ts index 0db41ee2..88d3d126 100644 --- a/src/models/personalRoomsModel.ts +++ b/src/models/personalRoomsModel.ts @@ -1,5 +1,5 @@ import { toOid } from "@/src/helpers/inventoryHelpers"; -import { IOrbiter, IPersonalRooms, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes"; +import { IOrbiter, IPersonalRoomsDatabase, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes"; import { IApartment, IFavouriteLoadoutDatabase, @@ -56,7 +56,7 @@ const roomSchema = new Schema( { Name: String, MaxCapacity: Number, - PlacedDecos: [placedDecosSchema] + PlacedDecos: { type: [placedDecosSchema], default: undefined } }, { _id: false } ); @@ -128,15 +128,15 @@ const tailorShopDefault: ITailorShopDatabase = { ] }; -export const personalRoomsSchema = new Schema({ +export const personalRoomsSchema = new Schema({ personalRoomsOwnerId: Schema.Types.ObjectId, activeShipId: Schema.Types.ObjectId, Ship: orbiterSchema, Apartment: apartmentSchema, - TailorShop: { - type: tailorShopSchema, - default: tailorShopDefault as any as undefined // Yeah, this is bad, but mongoose types here are wrong. - } + TailorShop: { type: tailorShopSchema, default: tailorShopDefault } }); -export const PersonalRooms = model("PersonalRooms", personalRoomsSchema); +export const PersonalRooms = model( + "PersonalRooms", + personalRoomsSchema +); diff --git a/src/types/personalRoomsTypes.ts b/src/types/personalRoomsTypes.ts index 379fdd3f..c99d8f5a 100644 --- a/src/types/personalRoomsTypes.ts +++ b/src/types/personalRoomsTypes.ts @@ -1,4 +1,11 @@ -import { IApartment, IRoom, IPlacedDecosDatabase, ITailorShop, TBootLocation } from "@/src/types/shipTypes"; +import { + IApartment, + IRoom, + IPlacedDecosDatabase, + ITailorShop, + ITailorShopDatabase, + TBootLocation +} from "@/src/types/shipTypes"; import { Model, Types } from "mongoose"; export interface IOrbiter { @@ -9,11 +16,17 @@ export interface IOrbiter { } export interface IPersonalRooms { + Ship: IOrbiter; + Apartment: IApartment; + TailorShop: ITailorShop; +} + +export interface IPersonalRoomsDatabase { personalRoomsOwnerId: Types.ObjectId; activeShipId: Types.ObjectId; Ship: IOrbiter; Apartment: IApartment; - TailorShop: ITailorShop; + TailorShop: ITailorShopDatabase; } export type RoomsType = { Name: string; MaxCapacity: number; PlacedDecos: Types.DocumentArray }; @@ -25,10 +38,10 @@ export type PersonalRoomsDocumentProps = { Apartment: Omit & { Rooms: RoomsType[]; }; - TailorShop: Omit & { + TailorShop: Omit & { Rooms: RoomsType[]; }; }; // eslint-disable-next-line @typescript-eslint/ban-types -export type PersonalRoomsModelType = Model; +export type PersonalRoomsModelType = Model; diff --git a/src/types/shipTypes.ts b/src/types/shipTypes.ts index 0501666e..d5f02d3d 100644 --- a/src/types/shipTypes.ts +++ b/src/types/shipTypes.ts @@ -163,5 +163,5 @@ export interface ITailorShopDatabase { export interface ITailorShop extends Omit { FavouriteLoadouts: IFavouriteLoadout[]; - Colors: []; // ??? + Colors?: []; // ??? }