返回提交历史
Modified
src/controllers/api/dojoComponentRushController.ts
+36
-22
XFEstudio/XFESpaceNinjaServer
feat: handle dojoComponentRush requests from ~U10 + respect buildLabel (#3494)
Closes #3477 Closes #3485 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3494 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
c4ed85a9
代码差异
1 个文件
+36
-22
@@ -7,41 +7,52 @@ import {
7
7
scaleRequiredCount
8
8
} from "../../services/guildService.ts";
9
9
import { getInventory, updateCurrency } from "../../services/inventoryService.ts";
10
import { getAccountIdForRequest } from "../../services/loginService.ts";
10
import { getAccountForRequest } from "../../services/loginService.ts";
11
11
import type { IDojoContributable } from "../../types/guildTypes.ts";
12
12
import type { RequestHandler } from "express";
13
13
import type { IDojoBuild } from "warframe-public-export-plus";
14
14
import { ExportDojoRecipes } from "warframe-public-export-plus";
15
15
16
interface IDojoComponentRushRequest {
17
DecoType?: string;
18
DecoId?: string;
19
ComponentId: string;
20
Amount: number;
21
VaultAmount: number;
22
AllianceVaultAmount: number;
23
}
16
type IDojoComponentRushRequest =
17
| {
18
DecoType?: string;
19
DecoId?: string;
20
ComponentId: string;
21
Amount: number;
22
VaultAmount: number;
23
AllianceVaultAmount: number;
24
}
25
| {
26
decoId?: string;
27
componentId: string;
28
amount: number;
29
vaultAmount: number;
30
};
24
31
25
32
export const dojoComponentRushController: RequestHandler = async (req, res) => {
26
const accountId = await getAccountIdForRequest(req);
27
const inventory = await getInventory(accountId);
33
const account = await getAccountForRequest(req);
34
const inventory = await getInventory(account._id.toString());
28
35
if (!hasAccessToDojo(inventory)) {
29
36
res.json({ DojoRequestStatus: -1 });
30
37
return;
31
38
}
32
39
const guild = await getGuildForRequestEx(req, inventory);
33
40
const request = JSON.parse(String(req.body)) as IDojoComponentRushRequest;
34
const component = guild.DojoComponents.id(request.ComponentId)!;
41
const component = guild.DojoComponents.id("ComponentId" in request ? request.ComponentId : request.componentId)!;
35
42
36
let platinumDonated = request.Amount;
37
const inventoryChanges = updateCurrency(inventory, request.Amount, true);
38
if (request.VaultAmount) {
39
platinumDonated += request.VaultAmount;
40
guild.VaultPremiumCredits! -= request.VaultAmount;
43
const amount = "Amount" in request ? request.Amount : request.amount;
44
let platinumDonated = amount;
45
const inventoryChanges = updateCurrency(inventory, amount, true);
46
47
const vaultAmount = "VaultAmount" in request ? request.VaultAmount : request.vaultAmount;
48
if (vaultAmount) {
49
platinumDonated += vaultAmount;
50
guild.VaultPremiumCredits! -= vaultAmount;
41
51
}
42
52
43
if (request.DecoId) {
44
const deco = component.Decos!.find(x => x._id.equals(request.DecoId))!;
53
const decoId = "DecoId" in request ? request.DecoId : "decoId" in request ? request.decoId : undefined;
54
if (decoId) {
55
const deco = component.Decos!.find(x => x._id.equals(decoId))!;
45
56
const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type)!;
46
57
processContribution(guild, deco, meta, platinumDonated);
47
58
} else {
@@ -54,14 +65,17 @@ export const dojoComponentRushController: RequestHandler = async (req, res) => {
54
65
}
55
66
}
56
67
57
const guildMember = (await GuildMember.findOne({ accountId, guildId: guild._id }, "PremiumCreditsContributed"))!;
68
const guildMember = (await GuildMember.findOne(
69
{ accountId: account._id, guildId: guild._id },
70
"PremiumCreditsContributed"
71
))!;
58
72
guildMember.PremiumCreditsContributed ??= 0;
59
guildMember.PremiumCreditsContributed += request.Amount;
73
guildMember.PremiumCreditsContributed += amount;
60
74
61
75
await Promise.all([guild.save(), inventory.save(), guildMember.save()]);
62
76
63
77
res.json({
64
...(await getDojoClient(guild, 0, component._id)),
78
...(await getDojoClient(guild, 0, component._id, account.BuildLabel)),
65
79
InventoryChanges: inventoryChanges
66
80
});
67
81
};