From 5089f67146c0f47e5bb4c1d3dd20e998ef42c614 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Fri, 4 Jul 2025 15:19:15 -0700 Subject: [PATCH] chore: improve ship customization stuff (#2402) The only functionally relevant change is that orbiter scenes are now saved via SkinFlavourItem (as of U39?). The rest is cleanup of the types because the ship customization stuff was duplicated all over the place. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2402 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/gardeningController.ts | 3 +- src/controllers/api/getShipController.ts | 15 +- .../api/setBootLocationController.ts | 2 +- .../api/setPlacedDecoInfoController.ts | 2 +- .../api/setShipCustomizationsController.ts | 2 +- .../api/setShipFavouriteLoadoutController.ts | 2 +- .../api/shipDecorationsController.ts | 2 +- src/models/commonModel.ts | 26 +++ src/models/inventoryModels/inventoryModel.ts | 28 +-- src/models/personalRoomsModel.ts | 36 +++- src/models/shipModel.ts | 2 +- src/services/personalRoomsService.ts | 3 +- src/services/shipCustomizationsService.ts | 11 +- src/types/guildTypes.ts | 2 +- src/types/inventoryTypes/inventoryTypes.ts | 18 +- src/types/personalRoomsTypes.ts | 201 ++++++++++++++++-- src/types/shipTypes.ts | 188 +--------------- 17 files changed, 262 insertions(+), 281 deletions(-) create mode 100644 src/models/commonModel.ts diff --git a/src/controllers/api/gardeningController.ts b/src/controllers/api/gardeningController.ts index 1913bd63..4cdb32fd 100644 --- a/src/controllers/api/gardeningController.ts +++ b/src/controllers/api/gardeningController.ts @@ -6,9 +6,8 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { createGarden, getPersonalRooms } from "@/src/services/personalRoomsService"; import { IMongoDate } from "@/src/types/commonTypes"; import { IMissionReward } from "@/src/types/missionTypes"; -import { IPersonalRoomsClient } from "@/src/types/personalRoomsTypes"; +import { IGardeningClient, IPersonalRoomsClient } from "@/src/types/personalRoomsTypes"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; -import { IGardeningClient } from "@/src/types/shipTypes"; import { RequestHandler } from "express"; import { dict_en, ExportResources } from "warframe-public-export-plus"; diff --git a/src/controllers/api/getShipController.ts b/src/controllers/api/getShipController.ts index ca22ec3d..ff04aec2 100644 --- a/src/controllers/api/getShipController.ts +++ b/src/controllers/api/getShipController.ts @@ -3,10 +3,9 @@ import { config } from "@/src/services/configService"; import allShipFeatures from "@/static/fixed_responses/allShipFeatures.json"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { createGarden, getPersonalRooms } from "@/src/services/personalRoomsService"; -import { toOid } from "@/src/helpers/inventoryHelpers"; -import { IGetShipResponse } from "@/src/types/shipTypes"; -import { IPersonalRoomsClient } from "@/src/types/personalRoomsTypes"; +import { IGetShipResponse, IPersonalRoomsClient } from "@/src/types/personalRoomsTypes"; import { getLoadout } from "@/src/services/loadoutService"; +import { toOid } from "@/src/helpers/inventoryHelpers"; export const getShipController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -26,15 +25,7 @@ export const getShipController: RequestHandler = async (req, res) => { LoadOutInventory: { LoadOutPresets: loadout.toJSON() }, Ship: { ...personalRooms.Ship, - ShipId: toOid(personalRoomsDb.activeShipId), - ShipInterior: { - Colors: personalRooms.ShipInteriorColors, - ShipAttachments: { HOOD_ORNAMENT: "" }, - SkinFlavourItem: "" - }, - FavouriteLoadoutId: personalRooms.Ship.FavouriteLoadoutId - ? toOid(personalRooms.Ship.FavouriteLoadoutId) - : undefined + ShipId: toOid(personalRoomsDb.activeShipId) }, Apartment: personalRooms.Apartment, TailorShop: personalRooms.TailorShop diff --git a/src/controllers/api/setBootLocationController.ts b/src/controllers/api/setBootLocationController.ts index 1baa5daa..dfccd1d7 100644 --- a/src/controllers/api/setBootLocationController.ts +++ b/src/controllers/api/setBootLocationController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getPersonalRooms } from "@/src/services/personalRoomsService"; -import { TBootLocation } from "@/src/types/shipTypes"; +import { TBootLocation } from "@/src/types/personalRoomsTypes"; import { getInventory } from "@/src/services/inventoryService"; export const setBootLocationController: RequestHandler = async (req, res) => { diff --git a/src/controllers/api/setPlacedDecoInfoController.ts b/src/controllers/api/setPlacedDecoInfoController.ts index 19f76061..83b44009 100644 --- a/src/controllers/api/setPlacedDecoInfoController.ts +++ b/src/controllers/api/setPlacedDecoInfoController.ts @@ -1,5 +1,5 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; -import { IPictureFrameInfo, ISetPlacedDecoInfoRequest } from "@/src/types/shipTypes"; +import { IPictureFrameInfo, ISetPlacedDecoInfoRequest } from "@/src/types/personalRoomsTypes"; import { RequestHandler } from "express"; import { handleSetPlacedDecoInfo } from "@/src/services/shipCustomizationsService"; diff --git a/src/controllers/api/setShipCustomizationsController.ts b/src/controllers/api/setShipCustomizationsController.ts index 01198665..286e416b 100644 --- a/src/controllers/api/setShipCustomizationsController.ts +++ b/src/controllers/api/setShipCustomizationsController.ts @@ -1,6 +1,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { setShipCustomizations } from "@/src/services/shipCustomizationsService"; -import { ISetShipCustomizationsRequest } from "@/src/types/shipTypes"; +import { ISetShipCustomizationsRequest } from "@/src/types/personalRoomsTypes"; import { logger } from "@/src/utils/logger"; import { RequestHandler } from "express"; diff --git a/src/controllers/api/setShipFavouriteLoadoutController.ts b/src/controllers/api/setShipFavouriteLoadoutController.ts index a7df934f..07b646df 100644 --- a/src/controllers/api/setShipFavouriteLoadoutController.ts +++ b/src/controllers/api/setShipFavouriteLoadoutController.ts @@ -3,7 +3,7 @@ import { RequestHandler } from "express"; import { getPersonalRooms } from "@/src/services/personalRoomsService"; import { IOid } from "@/src/types/commonTypes"; import { Types } from "mongoose"; -import { IFavouriteLoadoutDatabase, TBootLocation } from "@/src/types/shipTypes"; +import { IFavouriteLoadoutDatabase, TBootLocation } from "@/src/types/personalRoomsTypes"; export const setShipFavouriteLoadoutController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); diff --git a/src/controllers/api/shipDecorationsController.ts b/src/controllers/api/shipDecorationsController.ts index be09fe9f..c56c0a8d 100644 --- a/src/controllers/api/shipDecorationsController.ts +++ b/src/controllers/api/shipDecorationsController.ts @@ -1,5 +1,5 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; -import { IShipDecorationsRequest } from "@/src/types/shipTypes"; +import { IShipDecorationsRequest } from "@/src/types/personalRoomsTypes"; import { logger } from "@/src/utils/logger"; import { RequestHandler } from "express"; import { handleSetShipDecorations } from "@/src/services/shipCustomizationsService"; diff --git a/src/models/commonModel.ts b/src/models/commonModel.ts new file mode 100644 index 00000000..d29261f6 --- /dev/null +++ b/src/models/commonModel.ts @@ -0,0 +1,26 @@ +import { Schema } from "mongoose"; +import { IColor } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { IShipCustomization } from "@/src/types/personalRoomsTypes"; + +export const colorSchema = new Schema( + { + t0: Number, + t1: Number, + t2: Number, + t3: Number, + en: Number, + e1: Number, + m0: Number, + m1: Number + }, + { _id: false } +); + +export const shipCustomizationSchema = new Schema( + { + SkinFlavourItem: String, + Colors: colorSchema, + ShipAttachments: { HOOD_ORNAMENT: String } + }, + { _id: false } +); diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 067e44a5..f5f58759 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -42,7 +42,6 @@ import { ICrewShipCustomization, ICrewShipWeapon, ICrewShipWeaponEmplacements, - IShipExterior, IHelminthFoodRecord, ICrewShipMembersDatabase, IDialogueHistoryDatabase, @@ -106,7 +105,6 @@ import { import { IOid } from "../../types/commonTypes"; import { IAbilityOverride, - IColor, IItemConfig, IOperatorConfigDatabase, IPolarity, @@ -117,6 +115,7 @@ import { import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers"; import { EquipmentSelectionSchema, oidSchema } from "./loadoutModel"; import { ICountedStoreItem } from "warframe-public-export-plus"; +import { colorSchema, shipCustomizationSchema } from "../commonModel"; export const typeCountSchema = new Schema({ ItemType: String, ItemCount: Number }, { _id: false }); @@ -166,20 +165,6 @@ const abilityOverrideSchema = new Schema( { _id: false } ); -export const colorSchema = new Schema( - { - t0: Number, - t1: Number, - t2: Number, - t3: Number, - en: Number, - e1: Number, - m0: Number, - m1: Number - }, - { _id: false } -); - const operatorConfigSchema = new Schema( { Skins: [String], @@ -896,18 +881,9 @@ const crewShipWeaponSchema = new Schema( { _id: false } ); -const shipExteriorSchema = new Schema( - { - SkinFlavourItem: String, - Colors: colorSchema, - ShipAttachments: { HOOD_ORNAMENT: String } - }, - { _id: false } -); - const crewShipCustomizationSchema = new Schema( { - CrewshipInterior: shipExteriorSchema + CrewshipInterior: shipCustomizationSchema }, { _id: false } ); diff --git a/src/models/personalRoomsModel.ts b/src/models/personalRoomsModel.ts index 20f94a9a..d462177b 100644 --- a/src/models/personalRoomsModel.ts +++ b/src/models/personalRoomsModel.ts @@ -1,19 +1,22 @@ import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers"; -import { colorSchema } from "@/src/models/inventoryModels/inventoryModel"; -import { IOrbiter, IPersonalRoomsDatabase, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes"; import { + IApartmentDatabase, IFavouriteLoadoutDatabase, IGardeningDatabase, - IPlacedDecosDatabase, + IOrbiterClient, + IOrbiterDatabase, + IPersonalRoomsDatabase, IPictureFrameInfo, + IPlacedDecosDatabase, + IPlantClient, + IPlantDatabase, + IPlanterDatabase, IRoom, ITailorShopDatabase, - IApartmentDatabase, - IPlanterDatabase, - IPlantDatabase, - IPlantClient -} from "@/src/types/shipTypes"; + PersonalRoomsModelType +} from "@/src/types/personalRoomsTypes"; import { Schema, Types, model } from "mongoose"; +import { colorSchema, shipCustomizationSchema } from "./commonModel"; export const pictureFrameInfoSchema = new Schema( { @@ -137,10 +140,11 @@ const apartmentDefault: IApartmentDatabase = { } }; -const orbiterSchema = new Schema( +const orbiterSchema = new Schema( { Features: [String], Rooms: [roomSchema], + ShipInterior: shipCustomizationSchema, VignetteFish: { type: [String], default: undefined }, FavouriteLoadoutId: Schema.Types.ObjectId, Wallpaper: String, @@ -150,7 +154,18 @@ const orbiterSchema = new Schema( }, { _id: false } ); -const orbiterDefault: IOrbiter = { +orbiterSchema.set("toJSON", { + virtuals: true, + transform(_doc, obj) { + const db = obj as IOrbiterDatabase; + const client = obj as IOrbiterClient; + + if (db.FavouriteLoadoutId) { + client.FavouriteLoadoutId = toOid(db.FavouriteLoadoutId); + } + } +}); +const orbiterDefault: IOrbiterDatabase = { Features: ["/Lotus/Types/Items/ShipFeatureItems/EarthNavigationFeatureItem"], //TODO: potentially remove after missionstarting gear Rooms: [ { Name: "AlchemyRoom", MaxCapacity: 1600 }, @@ -197,7 +212,6 @@ const tailorShopDefault: ITailorShopDatabase = { export const personalRoomsSchema = new Schema({ personalRoomsOwnerId: Schema.Types.ObjectId, activeShipId: Schema.Types.ObjectId, - ShipInteriorColors: colorSchema, Ship: { type: orbiterSchema, default: orbiterDefault }, Apartment: { type: apartmentSchema, default: apartmentDefault }, TailorShop: { type: tailorShopSchema, default: tailorShopDefault } diff --git a/src/models/shipModel.ts b/src/models/shipModel.ts index a1cd1457..2e2c66d6 100644 --- a/src/models/shipModel.ts +++ b/src/models/shipModel.ts @@ -1,7 +1,7 @@ import { Document, Schema, Types, model } from "mongoose"; import { IShipDatabase } from "../types/shipTypes"; import { toOid } from "@/src/helpers/inventoryHelpers"; -import { colorSchema } from "@/src/models/inventoryModels/inventoryModel"; +import { colorSchema } from "@/src/models/commonModel"; import { IShipInventory } from "@/src/types/inventoryTypes/inventoryTypes"; const shipSchema = new Schema( diff --git a/src/services/personalRoomsService.ts b/src/services/personalRoomsService.ts index 8cf49ec1..2188c133 100644 --- a/src/services/personalRoomsService.ts +++ b/src/services/personalRoomsService.ts @@ -1,7 +1,6 @@ import { PersonalRooms } from "@/src/models/personalRoomsModel"; import { addItem, getInventory } from "@/src/services/inventoryService"; -import { TPersonalRoomsDatabaseDocument } from "../types/personalRoomsTypes"; -import { IGardeningDatabase } from "../types/shipTypes"; +import { IGardeningDatabase, TPersonalRoomsDatabaseDocument } from "../types/personalRoomsTypes"; import { getRandomElement } from "./rngService"; export const getPersonalRooms = async ( diff --git a/src/services/shipCustomizationsService.ts b/src/services/shipCustomizationsService.ts index c815dc56..223d35bf 100644 --- a/src/services/shipCustomizationsService.ts +++ b/src/services/shipCustomizationsService.ts @@ -1,12 +1,14 @@ import { getPersonalRooms } from "@/src/services/personalRoomsService"; import { getShip } from "@/src/services/shipService"; import { + ISetPlacedDecoInfoRequest, ISetShipCustomizationsRequest, IShipDecorationsRequest, IShipDecorationsResponse, - ISetPlacedDecoInfoRequest, - TBootLocation -} from "@/src/types/shipTypes"; + RoomsType, + TBootLocation, + TPersonalRoomsDatabaseDocument +} from "../types/personalRoomsTypes"; import { logger } from "@/src/utils/logger"; import { Types } from "mongoose"; import { addFusionTreasures, addShipDecorations, getInventory } from "./inventoryService"; @@ -15,7 +17,6 @@ import { Guild } from "../models/guildModel"; import { hasGuildPermission } from "./guildService"; import { GuildPermission } from "../types/guildTypes"; import { ExportResources } from "warframe-public-export-plus"; -import { RoomsType, TPersonalRoomsDatabaseDocument } from "../types/personalRoomsTypes"; export const setShipCustomizations = async ( accountId: string, @@ -39,7 +40,7 @@ export const setShipCustomizations = async ( personalRooms.TailorShop.LevelDecosVisible = shipCustomization.Customization.LevelDecosVisible; personalRooms.TailorShop.CustomJson = shipCustomization.Customization.CustomJson; } else { - personalRooms.ShipInteriorColors = shipCustomization.Customization.Colors; + personalRooms.Ship.ShipInterior = shipCustomization.Customization; } await personalRooms.save(); } diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 7913c5fe..0ecc1b53 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -1,7 +1,7 @@ import { Types } from "mongoose"; import { IOid, IMongoDate, IOidWithLegacySupport } from "@/src/types/commonTypes"; import { IFusionTreasure, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; -import { IPictureFrameInfo } from "./shipTypes"; +import { IPictureFrameInfo } from "./personalRoomsTypes"; import { IFriendInfo } from "./friendTypes"; export interface IGuildClient { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 06c47147..1785419e 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -11,7 +11,7 @@ import { IOperatorConfigDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IFingerprintStat, RivenFingerprint } from "@/src/helpers/rivenHelper"; -import { IOrbiter } from "../personalRoomsTypes"; +import { IOrbiterClient, IShipCustomization } from "../personalRoomsTypes"; import { ICountedStoreItem } from "warframe-public-export-plus"; export type InventoryDatabaseEquipment = { @@ -381,7 +381,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu BrandedSuits?: IOidWithLegacySupport[]; LockedWeaponGroup?: ILockedWeaponGroupClient; HubNpcCustomizations?: IHubNpcCustomization[]; - Ship?: IOrbiter; // U22 and below, response only + Ship?: IOrbiterClient; // U22 and below, response only ClaimedJunctionChallengeRewards?: string[]; // U39 SpecialItemRewardAttenuation?: IRewardAttenuation[]; // Baro's Void Surplus } @@ -575,17 +575,7 @@ export interface ICrewShipMemberDatabase { } export interface ICrewShipCustomization { - CrewshipInterior: IShipExterior; -} - -export interface IShipExterior { - SkinFlavourItem?: string; - Colors?: IColor; - ShipAttachments?: IShipAttachments; -} - -export interface IShipAttachments { - HOOD_ORNAMENT: string; + CrewshipInterior: IShipCustomization; } export interface IFlavourItem { @@ -1104,7 +1094,7 @@ export interface ISettings { export interface IShipInventory { ItemType: string; - ShipExterior: IShipExterior; + ShipExterior: IShipCustomization; AirSupportPower: string; ItemId: IOid; } diff --git a/src/types/personalRoomsTypes.ts b/src/types/personalRoomsTypes.ts index 325ab9e4..026b0c45 100644 --- a/src/types/personalRoomsTypes.ts +++ b/src/types/personalRoomsTypes.ts @@ -1,18 +1,45 @@ import { IColor } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { - IRoom, - IPlacedDecosDatabase, - ITailorShop, - ITailorShopDatabase, - TBootLocation, - IApartmentDatabase, - IApartmentClient -} from "@/src/types/shipTypes"; import { Document, Model, Types } from "mongoose"; +import { ILoadoutClient } from "./saveLoadoutTypes"; +import { IMongoDate, IOid } from "./commonTypes"; -export interface IOrbiter { +export interface IGetShipResponse { + ShipOwnerId: string; + Ship: IOrbiterClient; + Apartment: IApartmentClient; + TailorShop: ITailorShop; + LoadOutInventory: { LoadOutPresets: ILoadoutClient }; +} + +export interface IShipAttachments { + HOOD_ORNAMENT?: string; +} + +export interface IShipCustomization { + SkinFlavourItem?: string; + Colors?: IColor; + ShipAttachments?: IShipAttachments; +} + +export type TBootLocation = "LISET" | "DRIFTER_CAMP" | "APARTMENT" | "SHOP"; + +export interface IOrbiterClient { + Features: string[]; + ShipId: IOid; + ShipInterior: IShipCustomization; + Rooms: IRoom[]; + VignetteFish?: string[]; + FavouriteLoadoutId?: IOid; + Wallpaper?: string; + Vignette?: string; + BootLocation?: TBootLocation; + ContentUrlSignature?: string; +} + +export interface IOrbiterDatabase { Features: string[]; Rooms: IRoom[]; + ShipInterior?: IShipCustomization; VignetteFish?: string[]; FavouriteLoadoutId?: Types.ObjectId; Wallpaper?: string; @@ -22,25 +49,169 @@ export interface IOrbiter { } export interface IPersonalRoomsClient { - ShipInteriorColors: IColor; - Ship: IOrbiter; + Ship: IOrbiterClient; Apartment: IApartmentClient; TailorShop: ITailorShop; } export interface IPersonalRoomsDatabase { - ShipInteriorColors: IColor; personalRoomsOwnerId: Types.ObjectId; activeShipId: Types.ObjectId; - Ship: IOrbiter; + + Ship: IOrbiterDatabase; Apartment: IApartmentDatabase; TailorShop: ITailorShopDatabase; } +export interface IRoom { + Name: string; + MaxCapacity: number; + PlacedDecos?: IPlacedDecosDatabase[]; +} + +export interface IPlantClient { + PlantType: string; + EndTime: IMongoDate; + PlotIndex: number; +} + +export interface IPlantDatabase extends Omit { + EndTime: Date; +} + +export interface IPlanterClient { + Name: string; + Plants: IPlantClient[]; +} + +export interface IPlanterDatabase { + Name: string; + Plants: IPlantDatabase[]; +} + +export interface IGardeningClient { + Planters: IPlanterClient[]; +} + +export interface IGardeningDatabase { + Planters: IPlanterDatabase[]; +} + +export interface IApartmentClient { + Gardening: IGardeningClient; + Rooms: IRoom[]; + FavouriteLoadouts: IFavouriteLoadout[]; +} + +export interface IApartmentDatabase { + Gardening: IGardeningDatabase; + Rooms: IRoom[]; + FavouriteLoadouts: IFavouriteLoadoutDatabase[]; +} + +export interface IPlacedDecosDatabase { + Type: string; + Pos: [number, number, number]; + Rot: [number, number, number]; + Scale?: number; + Sockets?: number; + PictureFrameInfo?: IPictureFrameInfo; + _id: Types.ObjectId; +} + +export interface IPlacedDecosClient extends Omit { + id: IOid; +} + +export interface ISetShipCustomizationsRequest { + ShipId: string; + Customization: { + SkinFlavourItem?: string; + Colors?: IColor; + ShipAttachments?: IShipAttachments; + LevelDecosVisible?: boolean; + CustomJson?: string; + }; + IsExterior: boolean; + AirSupportPower?: string; + IsShop?: boolean; +} + +export interface IShipDecorationsRequest { + Type: string; + Pos: [number, number, number]; + Rot: [number, number, number]; + Room: string; + BootLocation?: TBootLocation; + IsApartment?: boolean; + RemoveId?: string; + MoveId?: string; + OldRoom?: string; + Scale?: number; + Sockets?: number; +} + +export interface IShipDecorationsResponse { + DecoId?: string; + Room?: string; + IsApartment?: boolean; + MaxCapacityIncrease?: number; + OldRoom?: string; + NewRoom?: string; +} + +export interface ISetPlacedDecoInfoRequest { + DecoType: string; + DecoId: string; + Room: string; + PictureFrameInfo: IPictureFrameInfo; + BootLocation?: TBootLocation; + ComponentId?: string; + GuildId?: string; +} + +export interface IPictureFrameInfo { + Image: string; + Filter: string; + XOffset: number; + YOffset: number; + Scale: number; + InvertX: boolean; + InvertY: boolean; + ColorCorrection: number; + Text: string; + TextScale: number; + TextColorA: number; + TextColorB: number; + TextOrientation: number; +} + +export interface IFavouriteLoadout { + Tag: string; + LoadoutId: IOid; +} + +export interface IFavouriteLoadoutDatabase { + Tag: string; + LoadoutId: Types.ObjectId; +} + +export interface ITailorShopDatabase { + FavouriteLoadouts: IFavouriteLoadoutDatabase[]; + Colors?: IColor; + CustomJson?: string; + LevelDecosVisible?: boolean; + Rooms: IRoom[]; +} + +export interface ITailorShop extends Omit { + FavouriteLoadouts: IFavouriteLoadout[]; +} + export type RoomsType = { Name: string; MaxCapacity: number; PlacedDecos: Types.DocumentArray }; export type PersonalRoomsDocumentProps = { - Ship: Omit & { + Ship: Omit & { Rooms: RoomsType[]; }; Apartment: Omit & { diff --git a/src/types/shipTypes.ts b/src/types/shipTypes.ts index 25555af7..c96ae3a5 100644 --- a/src/types/shipTypes.ts +++ b/src/types/shipTypes.ts @@ -1,40 +1,6 @@ import { Types } from "mongoose"; -import { IMongoDate, IOid } from "@/src/types/commonTypes"; import { IColor } from "@/src/types/inventoryTypes/commonInventoryTypes"; -import { ILoadoutClient } from "./saveLoadoutTypes"; - -export interface IGetShipResponse { - ShipOwnerId: string; - Ship: IShip; - Apartment: IApartmentClient; - TailorShop: ITailorShop; - LoadOutInventory: { LoadOutPresets: ILoadoutClient }; -} - -export interface IShipAttachments { - HOOD_ORNAMENT: string; -} - -export interface IShipInterior { - Colors?: IColor; - ShipAttachments?: IShipAttachments; - SkinFlavourItem?: string; -} - -export type TBootLocation = "LISET" | "DRIFTER_CAMP" | "APARTMENT" | "SHOP"; - -export interface IShip { - Features: string[]; - ShipId: IOid; - ShipInterior: IShipInterior; - Rooms: IRoom[]; - VignetteFish?: string[]; - FavouriteLoadoutId?: IOid; - Wallpaper?: string; - Vignette?: string; - BootLocation?: TBootLocation; - ContentUrlSignature?: string; -} +import { IShipAttachments } from "./personalRoomsTypes"; export interface IShipDatabase { ItemType: string; @@ -44,155 +10,3 @@ export interface IShipDatabase { ShipAttachments?: IShipAttachments; SkinFlavourItem?: string; } - -export interface IRoom { - Name: string; - MaxCapacity: number; - PlacedDecos?: IPlacedDecosDatabase[]; -} - -export interface IPlantClient { - PlantType: string; - EndTime: IMongoDate; - PlotIndex: number; -} - -export interface IPlantDatabase extends Omit { - EndTime: Date; -} - -export interface IPlanterClient { - Name: string; - Plants: IPlantClient[]; -} - -export interface IPlanterDatabase { - Name: string; - Plants: IPlantDatabase[]; -} - -export interface IGardeningClient { - Planters: IPlanterClient[]; -} - -export interface IGardeningDatabase { - Planters: IPlanterDatabase[]; -} - -export interface IApartmentClient { - Gardening: IGardeningClient; - Rooms: IRoom[]; - FavouriteLoadouts: IFavouriteLoadout[]; -} - -export interface IApartmentDatabase { - Gardening: IGardeningDatabase; - Rooms: IRoom[]; - FavouriteLoadouts: IFavouriteLoadoutDatabase[]; -} - -export interface IPlacedDecosDatabase { - Type: string; - Pos: [number, number, number]; - Rot: [number, number, number]; - Scale?: number; - Sockets?: number; - PictureFrameInfo?: IPictureFrameInfo; - _id: Types.ObjectId; -} - -export interface IPlacedDecosClient extends Omit { - id: IOid; -} - -export interface ISetShipCustomizationsRequest { - ShipId: string; - Customization: Customization; - IsExterior: boolean; - AirSupportPower?: string; - IsShop?: boolean; -} - -export interface Customization { - SkinFlavourItem: string; - Colors: IColor; - ShipAttachments: ShipAttachments; - LevelDecosVisible: boolean; - CustomJson: string; -} - -//TODO: check for more attachments -export interface ShipAttachments { - HOOD_ORNAMENT: string; -} - -export interface IShipDecorationsRequest { - Type: string; - Pos: [number, number, number]; - Rot: [number, number, number]; - Room: string; - BootLocation?: TBootLocation; - IsApartment?: boolean; - RemoveId?: string; - MoveId?: string; - OldRoom?: string; - Scale?: number; - Sockets?: number; -} - -export interface IShipDecorationsResponse { - DecoId?: string; - Room?: string; - IsApartment?: boolean; - MaxCapacityIncrease?: number; - OldRoom?: string; - NewRoom?: string; -} - -export interface ISetPlacedDecoInfoRequest { - DecoType: string; - DecoId: string; - Room: string; - PictureFrameInfo: IPictureFrameInfo; - BootLocation?: TBootLocation; - ComponentId?: string; - GuildId?: string; -} - -export interface IPictureFrameInfo { - Image: string; - Filter: string; - XOffset: number; - YOffset: number; - Scale: number; - InvertX: boolean; - InvertY: boolean; - ColorCorrection: number; - Text: string; - TextScale: number; - TextColorA: number; - TextColorB: number; - TextOrientation: number; -} - -export interface IFavouriteLoadout { - Tag: string; - LoadoutId: IOid; -} - -export interface IFavouriteLoadoutDatabase { - Tag: string; - LoadoutId: Types.ObjectId; -} - -export interface ITailorShopDatabase { - FavouriteLoadouts: IFavouriteLoadoutDatabase[]; - Colors?: IColor; - CustomJson: string; - LevelDecosVisible: boolean; - Rooms: IRoom[]; -} - -export interface ITailorShop extends Omit { - FavouriteLoadouts: IFavouriteLoadout[]; -}