返回提交历史
Modified
src/controllers/api/addFriendController.ts
+28
-14
Modified
src/controllers/api/addPendingFriendController.ts
+24
-11
Modified
src/routes/api.ts
+7
-5
XFEstudio/SpaceNinjaServer
feat: friendships in the oldest versions (#3142)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3142 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
51050a1f
代码差异
3 个文件
+59
-30
@@ -6,7 +6,7 @@ import { getAccountIdForRequest } from "../../services/loginService.ts";
6
6
import type { IFriendInfo } from "../../types/friendTypes.ts";
7
7
import type { RequestHandler } from "express";
8
8
9
export const addFriendController: RequestHandler = async (req, res) => {
9
export const addFriendPostController: RequestHandler = async (req, res) => {
10
10
const accountId = await getAccountIdForRequest(req);
11
11
const payload = getJSONfromString<IAddFriendRequest>(String(req.body));
12
12
const promises: Promise<void>[] = [];
@@ -31,19 +31,7 @@ export const addFriendController: RequestHandler = async (req, res) => {
31
31
}
32
32
}
33
33
} else {
34
const externalFriendship = await Friendship.findOne({ owner: payload.friend, friend: accountId }, "Note");
35
if (externalFriendship) {
36
promises.push(
37
Friendship.insertOne({
38
owner: accountId,
39
friend: payload.friend,
40
Note: externalFriendship.Note
41
}) as unknown as Promise<void>
42
);
43
newFriends.push({
44
_id: { $oid: payload.friend }
45
});
46
}
34
await acceptFriendRequest(accountId, payload.friend, newFriends);
47
35
}
48
36
for (const newFriend of newFriends) {
49
37
promises.push(addAccountDataToFriendInfo(newFriend));
@@ -58,3 +46,29 @@ export const addFriendController: RequestHandler = async (req, res) => {
58
46
interface IAddFriendRequest {
59
47
friend: string; // oid or "all" in which case all=1 is also a query parameter
60
48
}
49
50
export const addFriendGetController: RequestHandler = async (req, res) => {
51
const accountId = await getAccountIdForRequest(req);
52
await acceptFriendRequest(accountId, req.query.friend as string, undefined);
53
res.end();
54
};
55
56
const acceptFriendRequest = async (
57
accountId: string,
58
otherAccountId: string,
59
newFriends: IFriendInfo[] | undefined
60
): Promise<void> => {
61
const externalFriendship = await Friendship.findOne({ owner: otherAccountId, friend: accountId }, "Note");
62
if (externalFriendship) {
63
await Friendship.insertOne({
64
owner: accountId,
65
friend: otherAccountId,
66
Note: externalFriendship.Note
67
});
68
if (newFriends) {
69
newFriends.push({
70
_id: { $oid: otherAccountId }
71
});
72
}
73
}
74
};
@@ -6,18 +6,36 @@ import { addInventoryDataToFriendInfo, areFriendsOfFriends } from "../../service
6
6
import { getInventory } from "../../services/inventoryService.ts";
7
7
import { getAccountIdForRequest } from "../../services/loginService.ts";
8
8
import type { IFriendInfo } from "../../types/friendTypes.ts";
9
import type { RequestHandler } from "express";
9
import type { RequestHandler, Response } from "express";
10
10
11
export const addPendingFriendController: RequestHandler = async (req, res) => {
11
export const addPendingFriendPostController: RequestHandler = async (req, res) => {
12
const accountId = await getAccountIdForRequest(req);
12
13
const payload = getJSONfromString<IAddPendingFriendRequest>(String(req.body));
14
await sendFriendRequest(accountId, payload.friend, payload.message, res);
15
};
16
17
interface IAddPendingFriendRequest {
18
friend: string;
19
message: string;
20
}
21
22
export const addPendingFriendGetController: RequestHandler = async (req, res) => {
23
const accountId = await getAccountIdForRequest(req);
24
await sendFriendRequest(accountId, req.query.friend as string, undefined, res);
25
};
13
26
14
const account = await Account.findOne({ DisplayName: payload.friend });
27
const sendFriendRequest = async (
28
accountId: string,
29
name: string,
30
message: string | undefined,
31
res: Response
32
): Promise<void> => {
33
const account = await Account.findOne({ DisplayName: name });
15
34
if (!account) {
16
35
res.status(400).end();
17
36
return;
18
37
}
19
38
20
const accountId = await getAccountIdForRequest(req);
21
39
const inventory = await getInventory(account._id.toString(), "Settings");
22
40
if (
23
41
inventory.Settings?.FriendInvRestriction == "GIFT_MODE_NONE" ||
@@ -31,22 +49,17 @@ export const addPendingFriendController: RequestHandler = async (req, res) => {
31
49
await Friendship.insertOne({
32
50
owner: accountId,
33
51
friend: account._id,
34
Note: payload.message
52
Note: message
35
53
});
36
54
37
55
const friendInfo: IFriendInfo = {
38
56
_id: toOid(account._id),
39
57
DisplayName: account.DisplayName,
40
58
LastLogin: toMongoDate(account.LastLogin),
41
Note: payload.message
59
Note: message
42
60
};
43
61
await addInventoryDataToFriendInfo(friendInfo);
44
62
res.json({
45
63
Friend: friendInfo
46
64
});
47
65
};
48
49
interface IAddPendingFriendRequest {
50
friend: string;
51
message: string;
52
}
@@ -3,11 +3,11 @@ import { abandonLibraryDailyTaskController } from "../controllers/api/abandonLib
3
3
import { abortDojoComponentController } from "../controllers/api/abortDojoComponentController.ts";
4
4
import { abortDojoComponentDestructionController } from "../controllers/api/abortDojoComponentDestructionController.ts";
5
5
import { activateRandomModController } from "../controllers/api/activateRandomModController.ts";
6
import { addFriendController } from "../controllers/api/addFriendController.ts";
6
import { addFriendGetController, addFriendPostController } from "../controllers/api/addFriendController.ts";
7
7
import { addFriendImageGetController, addFriendImagePostController } from "../controllers/api/addFriendImageController.ts";
8
8
import { addFriendTitleController } from "../controllers/api/addFriendTitleController.ts";
9
9
import { addIgnoredUserController } from "../controllers/api/addIgnoredUserController.ts";
10
import { addPendingFriendController } from "../controllers/api/addPendingFriendController.ts";
10
import { addPendingFriendGetController, addPendingFriendPostController } from "../controllers/api/addPendingFriendController.ts";
11
11
import { addToAllianceController } from "../controllers/api/addToAllianceController.ts";
12
12
import { addToGuildController } from "../controllers/api/addToGuildController.ts";
13
13
import { adoptPetController } from "../controllers/api/adoptPetController.ts";
@@ -182,7 +182,9 @@ const apiRouter = express.Router();
182
182
// get
183
183
apiRouter.get("/abandonLibraryDailyTask.php", abandonLibraryDailyTaskController);
184
184
apiRouter.get("/abortDojoComponentDestruction.php", abortDojoComponentDestructionController);
185
apiRouter.get("/addFriend.php", addFriendGetController); // ~U16 and below
185
186
apiRouter.get("/addFriendImage.php", addFriendImageGetController) // U17 and below
187
apiRouter.get("/addPendingFriend.php", addPendingFriendGetController); // ~U10 and below
186
188
apiRouter.get("/apartment.php", apartmentController);
187
189
apiRouter.get("/cancelGuildAdvertisement.php", cancelGuildAdvertisementController);
188
190
apiRouter.get("/changeDojoRoot.php", changeDojoRootController);
@@ -214,8 +216,8 @@ apiRouter.get("/getNewRewardSeed.php", getNewRewardSeedController);
214
216
apiRouter.get("/getPastWeeklyChallenges.php", getPastWeeklyChallengesController)
215
217
apiRouter.get("/getShip.php", getShipController);
216
218
apiRouter.get("/getShipDecos.php", (_req, res) => { res.end(); }); // needed to log in on U22.8
217
apiRouter.get("/giveStartingGear.php", giveStartingGearGetController);
218
219
apiRouter.get("/getVendorInfo.php", getVendorInfoController);
220
apiRouter.get("/giveStartingGear.php", giveStartingGearGetController);
219
221
apiRouter.get("/hub", hubController);
220
222
apiRouter.get("/hubInstances", hubInstancesController);
221
223
apiRouter.get("/inbox.php", inboxController);
@@ -250,11 +252,11 @@ apiRouter.get("/worldState.php", worldStateController); // U8
250
252
// post
251
253
apiRouter.post("/abortDojoComponent.php", abortDojoComponentController);
252
254
apiRouter.post("/activateRandomMod.php", activateRandomModController);
253
apiRouter.post("/addFriend.php", addFriendController);
255
apiRouter.post("/addFriend.php", addFriendPostController);
254
256
apiRouter.post("/addFriendImage.php", addFriendImagePostController);
255
257
apiRouter.post("/addFriendTitle.php", addFriendTitleController);
256
258
apiRouter.post("/addIgnoredUser.php", addIgnoredUserController);
257
apiRouter.post("/addPendingFriend.php", addPendingFriendController);
259
apiRouter.post("/addPendingFriend.php", addPendingFriendPostController);
258
260
apiRouter.post("/addToAlliance.php", addToAllianceController);
259
261
apiRouter.post("/addToGuild.php", addToGuildController);
260
262
apiRouter.post("/adoptPet.php", adoptPetController);