返回提交历史
Modified
src/controllers/api/updateSessionController.ts
+8
-1
Modified
src/routes/api.ts
+3
-3
Modified
src/services/sessionService.ts
+40
-36
XFEstudio/XFESpaceNinjaServer
chore: improve updateSession get request handling (#4141)
To avoid logging "session update: undefined" Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/4141 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
51d3da9e
代码差异
3 个文件
+51
-40
@@ -1,7 +1,14 @@
1
1
import type { RequestHandler } from "express";
2
2
import { updateSession } from "../../services/sessionService.ts";
3
3
4
export const updateSessionController: RequestHandler = async (req, res) => {
4
export const updateSessionGetController: RequestHandler = async (req, res) => {
5
if (!(await updateSession(req.query.sessionId as string, undefined))) {
6
res.status(400);
7
}
8
res.json({});
9
};
10
11
export const updateSessionPostController: RequestHandler = async (req, res) => {
5
12
if (!(await updateSession(req.query.sessionId as string, String(req.body)))) {
6
13
res.status(400);
7
14
}
@@ -180,7 +180,7 @@ import { unlockShipFeatureController } from "../controllers/api/unlockShipFeatur
180
180
import { updateAlignmentController } from "../controllers/api/updateAlignmentController.ts";
181
181
import { updateChallengeProgressController } from "../controllers/api/updateChallengeProgressController.ts";
182
182
import { updateQuestController } from "../controllers/api/updateQuestController.ts";
183
import { updateSessionController } from "../controllers/api/updateSessionController.ts";
183
import { updateSessionGetController, updateSessionPostController } from "../controllers/api/updateSessionController.ts";
184
184
import { updateSongChallengeController } from "../controllers/api/updateSongChallengeController.ts";
185
185
import { updateThemeController } from "../controllers/api/updateThemeController.ts";
186
186
import { upgradeOperatorController } from "../controllers/api/upgradeOperatorController.ts";
@@ -267,7 +267,7 @@ apiRouter.get("/startLibraryPersonalTarget.php", startLibraryPersonalTargetContr
267
267
apiRouter.get("/surveys.php", surveysController);
268
268
apiRouter.get("/trading.php", tradingController);
269
269
apiRouter.get("/trainingResult.php", trainingResultGetController);
270
apiRouter.get("/updateSession.php", updateSessionController);
270
apiRouter.get("/updateSession.php", updateSessionGetController);
271
271
apiRouter.get("/upgradeOperator.php", upgradeOperatorController);
272
272
apiRouter.get("/version.php", versionController);
273
273
apiRouter.get("/worldState.php", worldStateController); // U8
@@ -416,7 +416,7 @@ apiRouter.post("/updateChallengeProgress.php", updateChallengeProgressController
416
416
apiRouter.post("/updateInventory.php", missionInventoryUpdateController); // U26 and below
417
417
apiRouter.post("/updateNodeIntros.php", genericUpdateController);
418
418
apiRouter.post("/updateQuest.php", updateQuestController);
419
apiRouter.post("/updateSession.php", updateSessionController);
419
apiRouter.post("/updateSession.php", updateSessionPostController);
420
420
apiRouter.post("/updateSongChallenge.php", updateSongChallengeController);
421
421
apiRouter.post("/updateTheme.php", updateThemeController);
422
422
apiRouter.post("/upgrades.php", upgradesController);
@@ -114,53 +114,57 @@ export const getSession = async (request: IFindSessionRequest): Promise<IFindSes
114
114
}));*/
115
115
};
116
116
117
export const updateSession = async (sessionId: string | Types.ObjectId, updateData: string): Promise<boolean> => {
118
logger.debug(`session update: ${updateData}`);
119
117
export const updateSession = async (
118
sessionId: string | Types.ObjectId,
119
updateData: string | undefined
120
): Promise<boolean> => {
120
121
//const session = sessions.find(session => session._id.equals(sessionId));
121
122
const session = await Session.findById(sessionId);
122
123
123
if (!session) {
124
124
return false;
125
125
}
126
if (updateData.substring(0, 1) == "{") {
127
try {
128
Object.assign(session, JSONParse(updateData));
129
} catch (error) {
130
logger.error("Invalid JSON string for session update.");
131
return false;
132
}
133
} else {
134
const updates: string[] = updateData.split("&");
135
for (const update of updates) {
136
const arr = update.split("=");
137
if (arr.length == 2) {
138
const [key, value] = arr;
139
switch (key) {
140
case "maxPlayers":
141
case "minPlayers":
142
case "privateSlots":
143
case "scoreLimit":
144
case "timeLimit":
145
case "gameModeId":
146
case "eloRating":
147
case "regionId":
148
case "difficulty":
149
case "freePublic":
150
case "freePrivate":
151
session[key] = parseInt(value);
152
break;
153
154
default:
155
logger.error(`unexpected key in legacy session update format: ${key}`);
156
break;
126
127
if (updateData) {
128
logger.debug(`session update: ${updateData}`);
129
if (updateData.substring(0, 1) == "{") {
130
try {
131
Object.assign(session, JSONParse(updateData));
132
} catch (error) {
133
logger.error("Invalid JSON string for session update.");
134
return false;
135
}
136
} else {
137
const updates: string[] = updateData.split("&");
138
for (const update of updates) {
139
const arr = update.split("=");
140
if (arr.length == 2) {
141
const [key, value] = arr;
142
switch (key) {
143
case "maxPlayers":
144
case "minPlayers":
145
case "privateSlots":
146
case "scoreLimit":
147
case "timeLimit":
148
case "gameModeId":
149
case "eloRating":
150
case "regionId":
151
case "difficulty":
152
case "freePublic":
153
case "freePrivate":
154
session[key] = parseInt(value);
155
break;
156
157
default:
158
logger.error(`unexpected key in legacy session update format: ${key}`);
159
break;
160
}
157
161
}
158
162
}
159
163
}
160
164
}
161
//logger.debug(`session after update:`, session);
162
165
163
166
session.lastUpdate = new Date();
167
//logger.debug(`session after update:`, session);
164
168
await session.save();
165
169
166
170
return true;