XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFESpaceNinjaServer

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
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

8 个文件 +46 -35
Deleted src/controllers/api/saveLoadout.ts +0 -32
@@ -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 };
Added src/controllers/api/saveLoadoutController.ts +21 -0
@@ -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 };
Modified src/models/inventoryModels/inventoryModel.ts +2 -0
@@ -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 }
Modified src/routes/api.ts +1 -1
@@ -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";
Modified src/services/saveLoadoutService.ts +19 -1
@@ -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 }
Modified src/types/inventoryTypes/commonInventoryTypes.ts +1 -0
@@ -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 }
Modified src/types/inventoryTypes/inventoryTypes.ts +1 -0
@@ -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 }
Modified src/types/saveLoadoutTypes.ts +1 -1
@@ -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