返回提交历史
Modified
src/controllers/api/missionInventoryUpdateController.ts
+8
-17
Modified
src/services/missionInventoryUpdateService.ts
+2
-7
Added
src/utils/ts-utils.ts
+5
-0
XFEstudio/SpaceNinjaServer
fix: adjust mission update controller to add xp when aborting mission(#864)
57061073
代码差异
3 个文件
+15
-24
@@ -8,7 +8,7 @@ import {
8
8
calculateFinalCredits
9
9
} from "@/src/services/missionInventoryUpdateService";
10
10
import { getInventory } from "@/src/services/inventoryService";
11
import { logger } from "@/src/utils/logger";
11
12
12
/*
13
13
**** INPUT ****
14
14
- [ ] crossPlaySetting
@@ -52,32 +52,23 @@ import { logger } from "@/src/utils/logger";
52
52
// eslint-disable-next-line @typescript-eslint/no-misused-promises
53
53
export const missionInventoryUpdateController: RequestHandler = async (req, res): Promise<void> => {
54
54
const accountId = await getAccountIdForRequest(req);
55
56
55
const missionReport = getJSONfromString<IMissionInventoryUpdateRequest>((req.body as string).toString());
57
56
57
const inventory = await getInventory(accountId);
58
const inventoryUpdates = addMissionInventoryUpdates(inventory, missionReport);
59
58
60
if (missionReport.MissionStatus !== "GS_SUCCESS") {
59
logger.debug(`Mission failed: ${missionReport.RewardInfo?.node}`);
60
//todo: return expected response for failed mission
61
res.json([]);
61
const InventoryJson = JSON.stringify((await inventory.save()).toJSON());
62
63
res.json({ InventoryJson, MissionRewards: [] });
62
64
return;
63
//duvirisadjob does not provide missionStatus
64
65
}
65
66
const inventory = await getInventory(accountId);
67
68
66
const missionRewardsResults = await addMissionRewards(inventory, missionReport);
69
70
67
if (!missionRewardsResults) {
71
logger.error("Failed to add mission rewards");
72
res.status(500).json({ error: "Failed to add mission rewards" });
73
return;
68
throw new Error("Failed to add mission rewards, should not happen");
74
69
}
75
76
70
const { MissionRewards, inventoryChanges, missionCompletionCredits } = missionRewardsResults;
77
71
78
const inventoryUpdates = addMissionInventoryUpdates(inventory, missionReport);
79
80
//todo ? can go after not awaiting
81
72
//creditBonus is not correct for mirage mission 3
82
73
const credits = calculateFinalCredits(inventory, {
83
74
missionCompletionCredits,
@@ -21,6 +21,7 @@ import { HydratedDocument } from "mongoose";
21
21
import { IInventoryChanges } from "@/src/types/purchaseTypes";
22
22
import { getLevelKeyRewards, getNode } from "@/src/services/itemDataService";
23
23
import { InventoryDocumentProps, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
24
import { getEntriesUnsafe } from "@/src/utils/ts-utils";
24
25
25
26
const getRotations = (rotationCount: number): number[] => {
26
27
if (rotationCount === 0) return [0];
@@ -64,12 +65,6 @@ export const fusionBundles: Record<string, number> = {
64
65
"/Lotus/Upgrades/Mods/FusionBundles/RareFusionBundle": 80
65
66
};
66
67
67
type Entries<T, K extends keyof T = keyof T> = (K extends unknown ? [K, T[K]] : never)[];
68
69
function getEntriesUnsafe<T extends object>(object: T): Entries<T> {
70
return Object.entries(object) as Entries<T>;
71
}
72
73
68
//type TMissionInventoryUpdateKeys = keyof IMissionInventoryUpdateRequest;
74
69
//const ignoredInventoryUpdateKeys = ["FpsAvg", "FpsMax", "FpsMin", "FpsSamples"] satisfies TMissionInventoryUpdateKeys[]; // for keys with no meaning for this server
75
70
//type TignoredInventoryUpdateKeys = (typeof ignoredInventoryUpdateKeys)[number];
@@ -185,7 +180,7 @@ export const addMissionRewards = async (
185
180
{ RewardInfo: rewardInfo, LevelKeyName: levelKeyName, Missions: missions }: IMissionInventoryUpdateRequest
186
181
) => {
187
182
if (!rewardInfo) {
188
logger.error("no reward info provided");
183
logger.warn("no reward info provided");
189
184
return;
190
185
}
191
186
@@ -0,0 +1,5 @@
1
type Entries<T, K extends keyof T = keyof T> = (K extends unknown ? [K, T[K]] : never)[];
2
3
export function getEntriesUnsafe<T extends object>(object: T): Entries<T> {
4
return Object.entries(object) as Entries<T>;
5
}