返回提交历史
Modified
src/controllers/api/artifactsController.ts
+57
-10
Modified
src/services/inventoryService.ts
+0
-55
Modified
src/types/requestTypes.ts
+0
-8
XFEstudio/SpaceNinjaServer
chore: move mod upgrading logic into artifactsController (#800)
f1c3dcbe
代码差异
3 个文件
+57
-73
@@ -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
}
@@ -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
};
@@ -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;