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: theme saving (#137)

1c28a402
Jānis <97699850+janisslsm@users.noreply.github.com>
提交于

代码差异

4 个文件 +43 -1
Added src/controllers/api/updateThemeController.ts +25 -0
@@ -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 };
Modified src/routes/api.ts +2 -0
@@ -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 };
Modified src/services/inventoryService.ts +10 -1
@@ -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,
Modified src/types/requestTypes.ts +6 -0
@@ -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[];