返回提交历史
Modified
src/controllers/api/gardeningController.ts
+1
-2
Modified
src/controllers/api/getShipController.ts
+3
-12
Modified
src/controllers/api/setBootLocationController.ts
+1
-1
Modified
src/controllers/api/setPlacedDecoInfoController.ts
+1
-1
Modified
src/controllers/api/setShipCustomizationsController.ts
+1
-1
Modified
src/controllers/api/setShipFavouriteLoadoutController.ts
+1
-1
Modified
src/controllers/api/shipDecorationsController.ts
+1
-1
Added
src/models/commonModel.ts
+26
-0
Modified
src/models/inventoryModels/inventoryModel.ts
+2
-26
Modified
src/models/personalRoomsModel.ts
+25
-11
Modified
src/models/shipModel.ts
+1
-1
Modified
src/services/personalRoomsService.ts
+1
-2
Modified
src/services/shipCustomizationsService.ts
+6
-5
Modified
src/types/guildTypes.ts
+1
-1
Modified
src/types/inventoryTypes/inventoryTypes.ts
+4
-14
Modified
src/types/personalRoomsTypes.ts
+186
-15
Modified
src/types/shipTypes.ts
+1
-187
XFEstudio/SpaceNinjaServer
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>
5089f671
代码差异
17 个文件
+262
-281
@@ -6,9 +6,8 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
6
6
import { createGarden, getPersonalRooms } from "@/src/services/personalRoomsService";
7
7
import { IMongoDate } from "@/src/types/commonTypes";
8
8
import { IMissionReward } from "@/src/types/missionTypes";
9
import { IPersonalRoomsClient } from "@/src/types/personalRoomsTypes";
9
import { IGardeningClient, IPersonalRoomsClient } from "@/src/types/personalRoomsTypes";
10
10
import { IInventoryChanges } from "@/src/types/purchaseTypes";
11
import { IGardeningClient } from "@/src/types/shipTypes";
12
11
import { RequestHandler } from "express";
13
12
import { dict_en, ExportResources } from "warframe-public-export-plus";
14
13
@@ -3,10 +3,9 @@ import { config } from "@/src/services/configService";
3
3
import allShipFeatures from "@/static/fixed_responses/allShipFeatures.json";
4
4
import { getAccountIdForRequest } from "@/src/services/loginService";
5
5
import { createGarden, getPersonalRooms } from "@/src/services/personalRoomsService";
6
import { toOid } from "@/src/helpers/inventoryHelpers";
7
import { IGetShipResponse } from "@/src/types/shipTypes";
8
import { IPersonalRoomsClient } from "@/src/types/personalRoomsTypes";
6
import { IGetShipResponse, IPersonalRoomsClient } from "@/src/types/personalRoomsTypes";
9
7
import { getLoadout } from "@/src/services/loadoutService";
8
import { toOid } from "@/src/helpers/inventoryHelpers";
10
9
11
10
export const getShipController: RequestHandler = async (req, res) => {
12
11
const accountId = await getAccountIdForRequest(req);
@@ -26,15 +25,7 @@ export const getShipController: RequestHandler = async (req, res) => {
26
25
LoadOutInventory: { LoadOutPresets: loadout.toJSON() },
27
26
Ship: {
28
27
...personalRooms.Ship,
29
ShipId: toOid(personalRoomsDb.activeShipId),
30
ShipInterior: {
31
Colors: personalRooms.ShipInteriorColors,
32
ShipAttachments: { HOOD_ORNAMENT: "" },
33
SkinFlavourItem: ""
34
},
35
FavouriteLoadoutId: personalRooms.Ship.FavouriteLoadoutId
36
? toOid(personalRooms.Ship.FavouriteLoadoutId)
37
: undefined
28
ShipId: toOid(personalRoomsDb.activeShipId)
38
29
},
39
30
Apartment: personalRooms.Apartment,
40
31
TailorShop: personalRooms.TailorShop
@@ -1,7 +1,7 @@
1
1
import { RequestHandler } from "express";
2
2
import { getAccountIdForRequest } from "@/src/services/loginService";
3
3
import { getPersonalRooms } from "@/src/services/personalRoomsService";
4
import { TBootLocation } from "@/src/types/shipTypes";
4
import { TBootLocation } from "@/src/types/personalRoomsTypes";
5
5
import { getInventory } from "@/src/services/inventoryService";
6
6
7
7
export const setBootLocationController: RequestHandler = async (req, res) => {
@@ -1,5 +1,5 @@
1
1
import { getAccountIdForRequest } from "@/src/services/loginService";
2
import { IPictureFrameInfo, ISetPlacedDecoInfoRequest } from "@/src/types/shipTypes";
2
import { IPictureFrameInfo, ISetPlacedDecoInfoRequest } from "@/src/types/personalRoomsTypes";
3
3
import { RequestHandler } from "express";
4
4
import { handleSetPlacedDecoInfo } from "@/src/services/shipCustomizationsService";
5
5
@@ -1,6 +1,6 @@
1
1
import { getAccountIdForRequest } from "@/src/services/loginService";
2
2
import { setShipCustomizations } from "@/src/services/shipCustomizationsService";
3
import { ISetShipCustomizationsRequest } from "@/src/types/shipTypes";
3
import { ISetShipCustomizationsRequest } from "@/src/types/personalRoomsTypes";
4
4
import { logger } from "@/src/utils/logger";
5
5
import { RequestHandler } from "express";
6
6
@@ -3,7 +3,7 @@ import { RequestHandler } from "express";
3
3
import { getPersonalRooms } from "@/src/services/personalRoomsService";
4
4
import { IOid } from "@/src/types/commonTypes";
5
5
import { Types } from "mongoose";
6
import { IFavouriteLoadoutDatabase, TBootLocation } from "@/src/types/shipTypes";
6
import { IFavouriteLoadoutDatabase, TBootLocation } from "@/src/types/personalRoomsTypes";
7
7
8
8
export const setShipFavouriteLoadoutController: RequestHandler = async (req, res) => {
9
9
const accountId = await getAccountIdForRequest(req);
@@ -1,5 +1,5 @@
1
1
import { getAccountIdForRequest } from "@/src/services/loginService";
2
import { IShipDecorationsRequest } from "@/src/types/shipTypes";
2
import { IShipDecorationsRequest } from "@/src/types/personalRoomsTypes";
3
3
import { logger } from "@/src/utils/logger";
4
4
import { RequestHandler } from "express";
5
5
import { handleSetShipDecorations } from "@/src/services/shipCustomizationsService";
@@ -0,0 +1,26 @@
1
import { Schema } from "mongoose";
2
import { IColor } from "@/src/types/inventoryTypes/commonInventoryTypes";
3
import { IShipCustomization } from "@/src/types/personalRoomsTypes";
4
5
export const colorSchema = new Schema<IColor>(
6
{
7
t0: Number,
8
t1: Number,
9
t2: Number,
10
t3: Number,
11
en: Number,
12
e1: Number,
13
m0: Number,
14
m1: Number
15
},
16
{ _id: false }
17
);
18
19
export const shipCustomizationSchema = new Schema<IShipCustomization>(
20
{
21
SkinFlavourItem: String,
22
Colors: colorSchema,
23
ShipAttachments: { HOOD_ORNAMENT: String }
24
},
25
{ _id: false }
26
);
@@ -42,7 +42,6 @@ import {
42
42
ICrewShipCustomization,
43
43
ICrewShipWeapon,
44
44
ICrewShipWeaponEmplacements,
45
IShipExterior,
46
45
IHelminthFoodRecord,
47
46
ICrewShipMembersDatabase,
48
47
IDialogueHistoryDatabase,
@@ -106,7 +105,6 @@ import {
106
105
import { IOid } from "../../types/commonTypes";
107
106
import {
108
107
IAbilityOverride,
109
IColor,
110
108
IItemConfig,
111
109
IOperatorConfigDatabase,
112
110
IPolarity,
@@ -117,6 +115,7 @@ import {
117
115
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
118
116
import { EquipmentSelectionSchema, oidSchema } from "./loadoutModel";
119
117
import { ICountedStoreItem } from "warframe-public-export-plus";
118
import { colorSchema, shipCustomizationSchema } from "../commonModel";
120
119
121
120
export const typeCountSchema = new Schema<ITypeCount>({ ItemType: String, ItemCount: Number }, { _id: false });
122
121
@@ -166,20 +165,6 @@ const abilityOverrideSchema = new Schema<IAbilityOverride>(
166
165
{ _id: false }
167
166
);
168
167
169
export const colorSchema = new Schema<IColor>(
170
{
171
t0: Number,
172
t1: Number,
173
t2: Number,
174
t3: Number,
175
en: Number,
176
e1: Number,
177
m0: Number,
178
m1: Number
179
},
180
{ _id: false }
181
);
182
183
168
const operatorConfigSchema = new Schema<IOperatorConfigDatabase>(
184
169
{
185
170
Skins: [String],
@@ -896,18 +881,9 @@ const crewShipWeaponSchema = new Schema<ICrewShipWeapon>(
896
881
{ _id: false }
897
882
);
898
883
899
const shipExteriorSchema = new Schema<IShipExterior>(
900
{
901
SkinFlavourItem: String,
902
Colors: colorSchema,
903
ShipAttachments: { HOOD_ORNAMENT: String }
904
},
905
{ _id: false }
906
);
907
908
884
const crewShipCustomizationSchema = new Schema<ICrewShipCustomization>(
909
885
{
910
CrewshipInterior: shipExteriorSchema
886
CrewshipInterior: shipCustomizationSchema
911
887
},
912
888
{ _id: false }
913
889
);
@@ -1,19 +1,22 @@
1
1
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
2
import { colorSchema } from "@/src/models/inventoryModels/inventoryModel";
3
import { IOrbiter, IPersonalRoomsDatabase, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes";
4
2
import {
3
IApartmentDatabase,
5
4
IFavouriteLoadoutDatabase,
6
5
IGardeningDatabase,
7
IPlacedDecosDatabase,
6
IOrbiterClient,
7
IOrbiterDatabase,
8
IPersonalRoomsDatabase,
8
9
IPictureFrameInfo,
10
IPlacedDecosDatabase,
11
IPlantClient,
12
IPlantDatabase,
13
IPlanterDatabase,
9
14
IRoom,
10
15
ITailorShopDatabase,
11
IApartmentDatabase,
12
IPlanterDatabase,
13
IPlantDatabase,
14
IPlantClient
15
} from "@/src/types/shipTypes";
16
PersonalRoomsModelType
17
} from "@/src/types/personalRoomsTypes";
16
18
import { Schema, Types, model } from "mongoose";
19
import { colorSchema, shipCustomizationSchema } from "./commonModel";
17
20
18
21
export const pictureFrameInfoSchema = new Schema<IPictureFrameInfo>(
19
22
{
@@ -137,10 +140,11 @@ const apartmentDefault: IApartmentDatabase = {
137
140
}
138
141
};
139
142
140
const orbiterSchema = new Schema<IOrbiter>(
143
const orbiterSchema = new Schema<IOrbiterDatabase>(
141
144
{
142
145
Features: [String],
143
146
Rooms: [roomSchema],
147
ShipInterior: shipCustomizationSchema,
144
148
VignetteFish: { type: [String], default: undefined },
145
149
FavouriteLoadoutId: Schema.Types.ObjectId,
146
150
Wallpaper: String,
@@ -150,7 +154,18 @@ const orbiterSchema = new Schema<IOrbiter>(
150
154
},
151
155
{ _id: false }
152
156
);
153
const orbiterDefault: IOrbiter = {
157
orbiterSchema.set("toJSON", {
158
virtuals: true,
159
transform(_doc, obj) {
160
const db = obj as IOrbiterDatabase;
161
const client = obj as IOrbiterClient;
162
163
if (db.FavouriteLoadoutId) {
164
client.FavouriteLoadoutId = toOid(db.FavouriteLoadoutId);
165
}
166
}
167
});
168
const orbiterDefault: IOrbiterDatabase = {
154
169
Features: ["/Lotus/Types/Items/ShipFeatureItems/EarthNavigationFeatureItem"], //TODO: potentially remove after missionstarting gear
155
170
Rooms: [
156
171
{ Name: "AlchemyRoom", MaxCapacity: 1600 },
@@ -197,7 +212,6 @@ const tailorShopDefault: ITailorShopDatabase = {
197
212
export const personalRoomsSchema = new Schema<IPersonalRoomsDatabase>({
198
213
personalRoomsOwnerId: Schema.Types.ObjectId,
199
214
activeShipId: Schema.Types.ObjectId,
200
ShipInteriorColors: colorSchema,
201
215
Ship: { type: orbiterSchema, default: orbiterDefault },
202
216
Apartment: { type: apartmentSchema, default: apartmentDefault },
203
217
TailorShop: { type: tailorShopSchema, default: tailorShopDefault }
@@ -1,7 +1,7 @@
1
1
import { Document, Schema, Types, model } from "mongoose";
2
2
import { IShipDatabase } from "../types/shipTypes";
3
3
import { toOid } from "@/src/helpers/inventoryHelpers";
4
import { colorSchema } from "@/src/models/inventoryModels/inventoryModel";
4
import { colorSchema } from "@/src/models/commonModel";
5
5
import { IShipInventory } from "@/src/types/inventoryTypes/inventoryTypes";
6
6
7
7
const shipSchema = new Schema<IShipDatabase>(
@@ -1,7 +1,6 @@
1
1
import { PersonalRooms } from "@/src/models/personalRoomsModel";
2
2
import { addItem, getInventory } from "@/src/services/inventoryService";
3
import { TPersonalRoomsDatabaseDocument } from "../types/personalRoomsTypes";
4
import { IGardeningDatabase } from "../types/shipTypes";
3
import { IGardeningDatabase, TPersonalRoomsDatabaseDocument } from "../types/personalRoomsTypes";
5
4
import { getRandomElement } from "./rngService";
6
5
7
6
export const getPersonalRooms = async (