返回提交历史
Modified
src/controllers/api/getGuildDojoController.ts
+2
-32
Modified
src/controllers/api/queueDojoComponentDestructionController.ts
+2
-4
Added
src/controllers/api/setDojoComponentMessageController.ts
+18
-0
Modified
src/controllers/api/startDojoRecipeController.ts
+2
-4
Modified
src/models/guildModel.ts
+2
-0
Modified
src/routes/api.ts
+2
-0
Modified
src/services/guildService.ts
+52
-2
Modified
src/types/guildTypes.ts
+2
-0
XFEstudio/SpaceNinjaServer
feat: setDojoComponentMessage (#948)
Closes #946 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/948
cf50738d
代码差异
8 个文件
+82
-42
@@ -1,8 +1,7 @@
1
1
import { RequestHandler } from "express";
2
2
import { Types } from "mongoose";
3
3
import { Guild } from "@/src/models/guildModel";
4
import { IDojoClient, IDojoComponentClient } from "@/src/types/guildTypes";
5
import { toOid, toMongoDate } from "@/src/helpers/inventoryHelpers";
4
import { getDojoClient } from "@/src/services/guildService";
6
5
7
6
export const getGuildDojoController: RequestHandler = async (req, res) => {
8
7
const guildId = req.query.guildId as string;
@@ -26,34 +25,5 @@ export const getGuildDojoController: RequestHandler = async (req, res) => {
26
25
await guild.save();
27
26
}
28
27
29
const dojo: IDojoClient = {
30
_id: { $oid: guildId },
31
Name: guild.Name,
32
Tier: 1,
33
FixedContributions: true,
34
DojoRevision: 1,
35
RevisionTime: Math.round(Date.now() / 1000),
36
Energy: guild.DojoEnergy,
37
Capacity: guild.DojoCapacity,
38
DojoRequestStatus: 0,
39
DojoComponents: []
40
};
41
guild.DojoComponents.forEach(dojoComponent => {
42
const clientComponent: IDojoComponentClient = {
43
id: toOid(dojoComponent._id),
44
pf: dojoComponent.pf,
45
ppf: dojoComponent.ppf,
46
DecoCapacity: 600
47
};
48
if (dojoComponent.pi) {
49
clientComponent.pi = toOid(dojoComponent.pi);
50
clientComponent.op = dojoComponent.op!;
51
clientComponent.pp = dojoComponent.pp!;
52
}
53
if (dojoComponent.CompletionTime) {
54
clientComponent.CompletionTime = toMongoDate(dojoComponent.CompletionTime);
55
}
56
dojo.DojoComponents.push(clientComponent);
57
});
58
res.json(dojo);
28
res.json(getDojoClient(guild, 0));
59
29
};
@@ -1,4 +1,4 @@
1
import { getGuildForRequest } from "@/src/services/guildService";
1
import { getDojoClient, getGuildForRequest } from "@/src/services/guildService";
2
2
import { RequestHandler } from "express";
3
3
import { ExportDojoRecipes } from "warframe-public-export-plus";
4
4
@@ -15,7 +15,5 @@ export const queueDojoComponentDestructionController: RequestHandler = async (re
15
15
guild.DojoEnergy -= room.energy;
16
16
}
17
17
await guild.save();
18
res.json({
19
DojoRequestStatus: 1
20
});
18
res.json(getDojoClient(guild, 1));
21
19
};
@@ -0,0 +1,18 @@
1
import { RequestHandler } from "express";
2
import { getDojoClient, getGuildForRequest } from "@/src/services/guildService";
3
4
export const setDojoComponentMessageController: RequestHandler = async (req, res) => {
5
const guild = await getGuildForRequest(req);
6
// At this point, we know that a member of the guild is making this request. Assuming they are allowed to change the message.
7
const component = guild.DojoComponents!.find(x => x._id.equals(req.query.componentId as string))!;
8
const payload = JSON.parse(String(req.body)) as SetDojoComponentMessageRequest;
9
if ("Name" in payload) {
10
component.Name = payload.Name;
11
} else {
12
component.Message = payload.Message;
13
}
14
await guild.save();
15
res.json(getDojoClient(guild, 1));
16
};
17
18
type SetDojoComponentMessageRequest = { Name: string } | { Message: string };
@@ -1,6 +1,6 @@
1
1
import { RequestHandler } from "express";
2
2
import { IDojoComponentClient } from "@/src/types/guildTypes";
3
import { getGuildForRequest } from "@/src/services/guildService";
3
import { getDojoClient, getGuildForRequest } from "@/src/services/guildService";
4
4
import { Types } from "mongoose";
5
5
import { ExportDojoRecipes } from "warframe-public-export-plus";
6
6
@@ -30,7 +30,5 @@ export const startDojoRecipeController: RequestHandler = async (req, res) => {
30
30
CompletionTime: new Date(Date.now()) // TOOD: Omit this field & handle the "Collecting Materials" state.
31
31
});
32
32
await guild.save();
33
res.json({
34
DojoRequestStatus: 0
35
});
33
res.json(getDojoClient(guild, 0));
36
34
};
@@ -14,6 +14,8 @@ const dojoComponentSchema = new Schema<IDojoComponentDatabase>({
14
14
pi: Schema.Types.ObjectId,
15
15
op: String,
16
16
pp: String,
17
Name: String,
18
Message: String,
17
19
CompletionTime: Date
18
20
});
19
21
@@ -62,6 +62,7 @@ import { sellController } from "@/src/controllers/api/sellController";
62
62
import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestController";
63
63
import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
64
64
import { setBootLocationController } from "@/src/controllers/api/setBootLocationController";
65
import { setDojoComponentMessageController } from "@/src/controllers/api/setDojoComponentMessageController";
65
66
import { setEquippedInstrumentController } from "@/src/controllers/api/setEquippedInstrumentController";
66
67
import { setPlacedDecoInfoController } from "@/src/controllers/api/setPlacedDecoInfoController";
67
68
import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController";
@@ -158,6 +159,7 @@ apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
158
159
apiRouter.post("/saveDialogue.php", saveDialogueController);
159
160
apiRouter.post("/saveLoadout.php", saveLoadoutController);
160
161
apiRouter.post("/sell.php", sellController);
162
apiRouter.post("/setDojoComponentMessage.php", setDojoComponentMessageController);
161
163
apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController);
162
164
apiRouter.post("/setPlacedDecoInfo.php", setPlacedDecoInfoController);
163
165
apiRouter.post("/setShipCustomizations.php", setShipCustomizationsController);
@@ -3,14 +3,20 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
3
3
import { getInventory } from "@/src/services/inventoryService";
4
4
import { Guild } from "@/src/models/guildModel";
5
5
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
6
import { IDojoClient, IDojoComponentClient, IGuildDatabase } from "@/src/types/guildTypes";
7
import { Document, Types } from "mongoose";
8
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
6
9
7
export const getGuildForRequest = async (req: Request) => {
10
export const getGuildForRequest = async (req: Request): Promise<TGuildDatabaseDocument> => {
8
11
const accountId = await getAccountIdForRequest(req);
9
12
const inventory = await getInventory(accountId);
10
13
return await getGuildForRequestEx(req, inventory);
11
14
};
12
15
13
export const getGuildForRequestEx = async (req: Request, inventory: TInventoryDatabaseDocument) => {
16
export const getGuildForRequestEx = async (
17
req: Request,
18
inventory: TInventoryDatabaseDocument
19
): Promise<TGuildDatabaseDocument> => {
14
20
const guildId = req.query.guildId as string;
15
21
if (!inventory.GuildId || inventory.GuildId.toString() != guildId) {
16
22
throw new Error("Account is not in the guild that it has sent a request for");
@@ -21,3 +27,47 @@ export const getGuildForRequestEx = async (req: Request, inventory: TInventoryDa
21
27
}
22
28
return guild;
23
29
};
30
31
export const getDojoClient = (guild: TGuildDatabaseDocument, status: number): IDojoClient => {
32
const dojo: IDojoClient = {
33
_id: { $oid: guild._id.toString() },
34
Name: guild.Name,
35
Tier: 1,
36
FixedContributions: true,
37
DojoRevision: 1,
38
RevisionTime: Math.round(Date.now() / 1000),
39
Energy: guild.DojoEnergy,
40
Capacity: guild.DojoCapacity,
41
DojoRequestStatus: status,
42
DojoComponents: []
43
};
44
guild.DojoComponents!.forEach(dojoComponent => {
45
const clientComponent: IDojoComponentClient = {
46
id: toOid(dojoComponent._id),
47
pf: dojoComponent.pf,
48
ppf: dojoComponent.ppf,
49
Name: dojoComponent.Name,
50
Message: dojoComponent.Message,
51
DecoCapacity: 600
52
};
53
if (dojoComponent.pi) {
54
clientComponent.pi = toOid(dojoComponent.pi);
55
clientComponent.op = dojoComponent.op!;
56
clientComponent.pp = dojoComponent.pp!;
57
}
58
if (dojoComponent.CompletionTime) {
59
clientComponent.CompletionTime = toMongoDate(dojoComponent.CompletionTime);
60
}
61
dojo.DojoComponents.push(clientComponent);
62
});
63
return dojo;
64
};
65
66
// eslint-disable-next-line @typescript-eslint/ban-types
67
export type TGuildDatabaseDocument = Document<unknown, {}, IGuildDatabase> &
68
IGuildDatabase &
69
Required<{
70
_id: Types.ObjectId;
71
}> & {
72
__v: number;
73
};
@@ -34,6 +34,8 @@ export interface IDojoComponentClient {
34
34
pi?: IOid; // Parent ID. N/A to root.
35
35
op?: string; // "Open Portal"? N/A to root.
36
36
pp?: string; // "Parent Portal"? N/A to root.
37
Name?: string;
38
Message?: string;
37
39
RegularCredits?: number; // "Collecting Materials" state: Number of credits that were donated.
38
40
MiscItems?: IMiscItem[]; // "Collecting Materials" state: Resources that were donated.
39
41
CompletionTime?: IMongoDate;