返回提交历史
Added
src/controllers/api/updateThemeController.ts
+25
-0
Modified
src/routes/api.ts
+2
-0
Modified
src/services/inventoryService.ts
+10
-1
Modified
src/types/requestTypes.ts
+6
-0
XFEstudio/XFESpaceNinjaServer
feat: theme saving (#137)
1c28a402
代码差异
4 个文件
+43
-1
@@ -0,0 +1,25 @@
1
import { getJSONfromString } from "@/src/helpers/stringHelpers";
2
import { updateTheme } from "@/src/services/inventoryService";
3
import { IThemeUpdateRequest } from "@/src/types/requestTypes";
4
import { RequestHandler } from "express";
5
6
// eslint-disable-next-line @typescript-eslint/no-misused-promises
7
const updateThemeController: RequestHandler = async (request, response) => {
8
const accountId = request.query.accountId as string;
9
const body = String(request.body);
10
11
try {
12
const json = getJSONfromString(body) as IThemeUpdateRequest;
13
if (typeof json !== "object") {
14
throw new Error("Invalid data format");
15
}
16
17
await updateTheme(json, accountId);
18
} catch (err) {
19
console.error("Error parsing JSON data:", err);
20
}
21
22
response.json({});
23
};
24
25
export { updateThemeController };
@@ -40,6 +40,7 @@ import { claimCompletedRecipeController } from "@/src/controllers/api/claimCompl
40
40
import { shipDecorationsController } from "@/src/controllers/api/shipDecorationsController";
41
41
import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController";
42
42
import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
43
import { updateThemeController } from "../controllers/api/updateThemeController";
43
44
44
45
const apiRouter = express.Router();
45
46
@@ -90,5 +91,6 @@ apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
90
91
apiRouter.post("/joinSession.php", joinSessionController);
91
92
apiRouter.post("/saveLoadout.php", saveLoadoutController);
92
93
apiRouter.post("/trainingResult.php", trainingResultController);
94
apiRouter.post("/updateTheme.php", updateThemeController);
93
95
94
96
export { apiRouter };
@@ -15,7 +15,7 @@ import {
15
15
IRawUpgrade
16
16
} from "@/src/types/inventoryTypes/inventoryTypes";
17
17
import { IGenericUpdate } from "../types/genericUpdate";
18
import { IArtifactsRequest, IMissionInventoryUpdateRequest } from "../types/requestTypes";
18
import { IArtifactsRequest, IMissionInventoryUpdateRequest, IThemeUpdateRequest } from "../types/requestTypes";
19
19
import { logger } from "@/src/utils/logger";
20
20
import { WeaponTypeInternal } from "@/src/services/itemDataService";
21
21
@@ -150,6 +150,15 @@ export const updateGeneric = async (data: IGenericUpdate, accountId: string) =>
150
150
return data;
151
151
};
152
152
153
export const updateTheme = async (data: IThemeUpdateRequest, accountId: string) => {
154
const inventory = await getInventory(accountId);
155
if (data.Style) inventory.ThemeStyle = data.Style;
156
if (data.Background) inventory.ThemeBackground = data.Background;
157
if (data.Sounds) inventory.ThemeSounds = data.Sounds;
158
159
await inventory.save();
160
};
161
153
162
export const addWeapon = async (
154
163
weaponType: WeaponTypeInternal,
155
164
weaponName: string,
@@ -17,6 +17,12 @@ export interface IArtifactsRequest {
17
17
FusionPointCost: number;
18
18
}
19
19
20
export interface IThemeUpdateRequest {
21
Style?: string;
22
Background?: string;
23
Sounds?: string;
24
}
25
20
26
export interface IMissionInventoryUpdateRequest {
21
27
rewardsMultiplier?: number;
22
28
ActiveBoosters?: IBooster[];