返回提交历史
Deleted
src/controllers/api/saveLoadout.ts
+0
-32
Added
src/controllers/api/saveLoadoutController.ts
+21
-0
Modified
src/models/inventoryModels/inventoryModel.ts
+2
-0
Modified
src/routes/api.ts
+1
-1
Modified
src/services/saveLoadoutService.ts
+19
-1
Modified
src/types/inventoryTypes/commonInventoryTypes.ts
+1
-0
Modified
src/types/inventoryTypes/inventoryTypes.ts
+1
-0
Modified
src/types/saveLoadoutTypes.ts
+1
-1
XFEstudio/SpaceNinjaServer
feat: favoriting equipment & skins (#1555)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1555 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
dde95c2b
代码差异
8 个文件
+46
-35
@@ -1,32 +0,0 @@
1
import { RequestHandler } from "express";
2
import { ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes";
3
import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutService";
4
import { getAccountIdForRequest } from "@/src/services/loginService";
5
import { logger } from "@/src/utils/logger";
6
7
export const saveLoadoutController: RequestHandler = async (req, res) => {
8
//validate here
9
const accountId = await getAccountIdForRequest(req);
10
11
try {
12
const body: ISaveLoadoutRequest = JSON.parse(req.body as string) as ISaveLoadoutRequest;
13
// console.log(util.inspect(body, { showHidden: false, depth: null, colors: true }));
14
15
// eslint-disable-next-line @typescript-eslint/no-unused-vars
16
const { UpgradeVer, ...equipmentChanges } = body;
17
const newLoadoutId = await handleInventoryItemConfigChange(equipmentChanges, accountId);
18
19
//send back new loadout id, if new loadout was added
20
if (newLoadoutId) {
21
res.send(newLoadoutId);
22
}
23
res.status(200).end();
24
} catch (error: unknown) {
25
if (error instanceof Error) {
26
logger.error(`error in saveLoadoutController: ${error.message}`);
27
res.status(400).json({ error: error.message });
28
} else {
29
res.status(400).json({ error: "unknown error" });
30
}
31
}
32
};
@@ -0,0 +1,21 @@
1
import { RequestHandler } from "express";
2
import { ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes";
3
import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutService";
4
import { getAccountIdForRequest } from "@/src/services/loginService";
5
6
export const saveLoadoutController: RequestHandler = async (req, res) => {
7
const accountId = await getAccountIdForRequest(req);
8
9
const body: ISaveLoadoutRequest = JSON.parse(req.body as string) as ISaveLoadoutRequest;
10
// console.log(util.inspect(body, { showHidden: false, depth: null, colors: true }));
11
12
// eslint-disable-next-line @typescript-eslint/no-unused-vars
13
const { UpgradeVer, ...equipmentChanges } = body;
14
const newLoadoutId = await handleInventoryItemConfigChange(equipmentChanges, accountId);
15
16
//send back new loadout id, if new loadout was added
17
if (newLoadoutId) {
18
res.send(newLoadoutId);
19
}
20
res.end();
21
};
@@ -612,6 +612,7 @@ const spectreLoadoutsSchema = new Schema<ISpectreLoadout>(
612
612
const weaponSkinsSchema = new Schema<IWeaponSkinDatabase>(
613
613
{
614
614
ItemType: String,
615
Favorite: Boolean,
615
616
IsNew: Boolean
616
617
},
617
618
{ id: false }
@@ -880,6 +881,7 @@ const EquipmentSchema = new Schema<IEquipmentDatabase>(
880
881
RailjackImage: FlavourItemSchema,
881
882
CrewMembers: crewShipMembersSchema,
882
883
Details: detailsSchema,
884
Favorite: Boolean,
883
885
IsNew: Boolean
884
886
},
885
887
{ id: false }
@@ -97,7 +97,7 @@ import { removeFromGuildController } from "@/src/controllers/api/removeFromGuild
97
97
import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
98
98
import { retrievePetFromStasisController } from "@/src/controllers/api/retrievePetFromStasisController";
99
99
import { saveDialogueController } from "@/src/controllers/api/saveDialogueController";
100
import { saveLoadoutController } from "@/src/controllers/api/saveLoadout";
100
import { saveLoadoutController } from "@/src/controllers/api/saveLoadoutController";
101
101
import { saveSettingsController } from "@/src/controllers/api/saveSettingsController";
102
102
import { saveVaultAutoContributeController } from "@/src/controllers/api/saveVaultAutoContributeController";
103
103
import { sellController } from "@/src/controllers/api/sellController";
@@ -140,7 +140,22 @@ export const handleInventoryItemConfigChange = async (
140
140
case "WeaponSkins": {
141
141
const itemEntries = equipment as IItemEntry;
142
142
for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) {
143
inventory.WeaponSkins.id(itemId)!.IsNew = itemConfigEntries.IsNew;
143
if (itemId.startsWith("ca70ca70ca70ca70")) {
144
logger.warn(
145
`unlockAllSkins does not work with favoriting items because you don't actually own it`
146
);
147
} else {
148
const inventoryItem = inventory.WeaponSkins.id(itemId);
149
if (!inventoryItem) {
150
throw new Error(`inventory item WeaponSkins not found with id ${itemId}`);
151
}
152
if ("Favorite" in itemConfigEntries) {
153
inventoryItem.Favorite = itemConfigEntries.Favorite;
154
}
155
if ("IsNew" in itemConfigEntries) {
156
inventoryItem.IsNew = itemConfigEntries.IsNew;
157
}
158
}
144
159
}
145
160
break;
146
161
}
@@ -163,6 +178,9 @@ export const handleInventoryItemConfigChange = async (
163
178
inventoryItem.Configs[parseInt(configId)] = config;
164
179
}
165
180
}
181
if ("Favorite" in itemConfigEntries) {
182
inventoryItem.Favorite = itemConfigEntries.Favorite;
183
}
166
184
if ("IsNew" in itemConfigEntries) {
167
185
inventoryItem.IsNew = itemConfigEntries.IsNew;
168
186
}
@@ -142,6 +142,7 @@ export interface IEquipmentDatabase {
142
142
RailjackImage?: IFlavourItem;
143
143
CrewMembers?: ICrewShipMembersDatabase;
144
144
Details?: IKubrowPetDetailsDatabase;
145
Favorite?: boolean;
145
146
IsNew?: boolean;
146
147
_id: Types.ObjectId;
147
148
}
@@ -1034,6 +1034,7 @@ export interface ITaunt {
1034
1034
1035
1035
export interface IWeaponSkinDatabase {
1036
1036
ItemType: string;
1037
Favorite?: boolean;
1037
1038
IsNew?: boolean;
1038
1039
_id: Types.ObjectId;
1039
1040
}
@@ -51,7 +51,7 @@ export interface IItemEntry {
51
51
52
52
export type IConfigEntry = {
53
53
[configId in "0" | "1" | "2" | "3" | "4" | "5"]: IItemConfig;
54
} & { IsNew?: boolean };
54
} & { Favorite?: boolean; IsNew?: boolean };
55
55
56
56
export type ILoadoutClient = Omit<ILoadoutDatabase, "_id" | "loadoutOwnerId">;
57
57