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

SpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/SpaceNinjaServer

chore: move mod upgrading logic into artifactsController (#800)

f1c3dcbe
Sainan <sainan@calamity.inc>
提交于

代码差异

3 个文件 +57 -73
Modified src/controllers/api/artifactsController.ts +57 -10
@@ -1,19 +1,66 @@
1 1 import { getJSONfromString } from "@/src/helpers/stringHelpers";
2 2 import { getAccountIdForRequest } from "@/src/services/loginService";
3 import { upgradeMod } from "@/src/services/inventoryService";
4 import { IArtifactsRequest } from "@/src/types/requestTypes";
5 3 import { RequestHandler } from "express";
4 import { ICrewShipSalvagedWeaponSkin } from "@/src/types/inventoryTypes/inventoryTypes";
5 import { getInventory } from "@/src/services/inventoryService";
6 import { config } from "@/src/services/configService";
6 7
7 const artifactsController: RequestHandler = async (req, res) => {
8 export const artifactsController: RequestHandler = async (req, res) => {
8 9 const accountId = await getAccountIdForRequest(req);
10 const artifactsData = getJSONfromString(String(req.body)) as IArtifactsRequest;
9 11
10 try {
11 const artifactsData = getJSONfromString(String(req.body)) as IArtifactsRequest;
12 const upgradeModId = await upgradeMod(artifactsData, accountId);
13 res.send(upgradeModId);
14 } catch (err) {
15 console.error("Error parsing JSON data:", err);
12 const { Upgrade, LevelDiff, Cost, FusionPointCost } = artifactsData;
13
14 const inventory = await getInventory(accountId);
15 const { Upgrades, RawUpgrades } = inventory;
16 const { ItemType, UpgradeFingerprint, ItemId } = Upgrade;
17
18 const safeUpgradeFingerprint = UpgradeFingerprint || '{"lvl":0}';
19 const parsedUpgradeFingerprint = JSON.parse(safeUpgradeFingerprint) as { lvl: number };
20 parsedUpgradeFingerprint.lvl += LevelDiff;
21 const stringifiedUpgradeFingerprint = JSON.stringify(parsedUpgradeFingerprint);
22
23 let itemIndex = Upgrades.findIndex(upgrade => upgrade._id?.equals(ItemId!.$oid));
24
25 if (itemIndex !== -1) {
26 Upgrades[itemIndex].UpgradeFingerprint = stringifiedUpgradeFingerprint;
27 inventory.markModified(`Upgrades.${itemIndex}.UpgradeFingerprint`);
28 } else {
29 itemIndex =
30 Upgrades.push({
31 UpgradeFingerprint: stringifiedUpgradeFingerprint,
32 ItemType
33 }) - 1;
34
35 const rawItemIndex = RawUpgrades.findIndex(rawUpgrade => rawUpgrade.ItemType === ItemType);
36 RawUpgrades[rawItemIndex].ItemCount--;
37 if (RawUpgrades[rawItemIndex].ItemCount > 0) {
38 inventory.markModified(`RawUpgrades.${rawItemIndex}.UpgradeFingerprint`);
39 } else {
40 RawUpgrades.splice(rawItemIndex, 1);
41 }
42 }
43
44 if (!config.infiniteCredits) {
45 inventory.RegularCredits -= Cost;
46 }
47 if (!config.infiniteEndo) {
48 inventory.FusionPoints -= FusionPointCost;
49 }
50
51 const changedInventory = await inventory.save();
52 const itemId = changedInventory.toJSON().Upgrades[itemIndex]?.ItemId?.$oid;
53
54 if (!itemId) {
55 throw new Error("Item Id not found in upgradeMod");
16 56 }
57
58 res.send(itemId);
17 59 };
18 60
19 export { artifactsController };
61 interface IArtifactsRequest {
62 Upgrade: ICrewShipSalvagedWeaponSkin;
63 LevelDiff: number;
64 Cost: number;
65 FusionPointCost: number;
66 }
Modified src/services/inventoryService.ts +0 -55
@@ -21,7 +21,6 @@ import {
21 21 } from "@/src/types/inventoryTypes/inventoryTypes";
22 22 import { IGenericUpdate } from "../types/genericUpdate";
23 23 import {
24 IArtifactsRequest,
25 24 IMissionInventoryUpdateRequest,
26 25 IThemeUpdateRequest,
27 26 IUpdateChallengeProgressRequest
@@ -899,57 +898,3 @@ export const addBooster = async (ItemType: string, time: number, accountId: stri
899 898
900 899 await inventory.save();
901 900 };
902
903 export const upgradeMod = async (artifactsData: IArtifactsRequest, accountId: string): Promise<string | undefined> => {
904 const { Upgrade, LevelDiff, Cost, FusionPointCost } = artifactsData;
905 try {
906 const inventory = await getInventory(accountId);
907 const { Upgrades, RawUpgrades } = inventory;
908 const { ItemType, UpgradeFingerprint, ItemId } = Upgrade;
909
910 const safeUpgradeFingerprint = UpgradeFingerprint || '{"lvl":0}';
911 const parsedUpgradeFingerprint = JSON.parse(safeUpgradeFingerprint) as { lvl: number };
912 parsedUpgradeFingerprint.lvl += LevelDiff;
913 const stringifiedUpgradeFingerprint = JSON.stringify(parsedUpgradeFingerprint);
914
915 let itemIndex = Upgrades.findIndex(upgrade => upgrade._id?.equals(ItemId!.$oid));
916
917 if (itemIndex !== -1) {
918 Upgrades[itemIndex].UpgradeFingerprint = stringifiedUpgradeFingerprint;
919 inventory.markModified(`Upgrades.${itemIndex}.UpgradeFingerprint`);
920 } else {
921 itemIndex =
922 Upgrades.push({
923 UpgradeFingerprint: stringifiedUpgradeFingerprint,
924 ItemType
925 }) - 1;
926
927 const rawItemIndex = RawUpgrades.findIndex(rawUpgrade => rawUpgrade.ItemType === ItemType);
928 RawUpgrades[rawItemIndex].ItemCount--;
929 if (RawUpgrades[rawItemIndex].ItemCount > 0) {
930 inventory.markModified(`RawUpgrades.${rawItemIndex}.UpgradeFingerprint`);
931 } else {
932 RawUpgrades.splice(rawItemIndex, 1);
933 }
934 }
935
936 if (!config.infiniteCredits) {
937 inventory.RegularCredits -= Cost;
938 }
939 if (!config.infiniteEndo) {
940 inventory.FusionPoints -= FusionPointCost;
941 }
942
943 const changedInventory = await inventory.save();
944 const itemId = changedInventory.toJSON().Upgrades[itemIndex]?.ItemId?.$oid;
945
946 if (!itemId) {
947 throw new Error("Item Id not found in upgradeMod");
948 }
949
950 return itemId;
951 } catch (error) {
952 console.error("Error in upgradeMod:", error);
953 throw error;
954 }
955 };
Modified src/types/requestTypes.ts +0 -8
@@ -4,7 +4,6 @@ import {
4 4 IBooster,
5 5 IChallengeProgress,
6 6 IConsumable,
7 ICrewShipSalvagedWeaponSkin,
8 7 IEvolutionProgress,
9 8 IMiscItem,
10 9 ITypeCount,
@@ -16,13 +15,6 @@ import {
16 15 IFusionTreasure
17 16 } from "./inventoryTypes/inventoryTypes";
18 17
19 export interface IArtifactsRequest {
20 Upgrade: ICrewShipSalvagedWeaponSkin;
21 LevelDiff: number;
22 Cost: number;
23 FusionPointCost: number;
24 }
25
26 18 export interface IThemeUpdateRequest {
27 19 Style?: string;
28 20 Background?: string;