返回提交历史
Modified
src/controllers/api/contributeToVaultController.ts
+37
-11
Modified
src/models/guildModel.ts
+7
-0
XFEstudio/XFESpaceNinjaServer
feat: contribute to allied clan vault (#1462)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1462 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
6bb74b02
代码差异
2 个文件
+44
-11
@@ -1,4 +1,10 @@
1
import { Alliance, GuildMember } from "@/src/models/guildModel";
1
import {
2
Alliance,
3
Guild,
4
GuildMember,
5
TGuildDatabaseDocument,
6
TGuildMemberDatabaseDocument
7
} from "@/src/models/guildModel";
2
8
import {
3
9
addGuildMemberMiscItemContribution,
4
10
addGuildMemberShipDecoContribution,
@@ -21,10 +27,10 @@ import { RequestHandler } from "express";
21
27
export const contributeToVaultController: RequestHandler = async (req, res) => {
22
28
const accountId = await getAccountIdForRequest(req);
23
29
const inventory = await getInventory(accountId, "GuildId RegularCredits MiscItems ShipDecorations FusionTreasures");
24
const guild = await getGuildForRequestEx(req, inventory);
25
30
const request = JSON.parse(String(req.body)) as IContributeToVaultRequest;
26
31
27
32
if (request.Alliance) {
33
const guild = await getGuildForRequestEx(req, inventory);
28
34
const alliance = (await Alliance.findById(guild.AllianceId!))!;
29
35
alliance.VaultRegularCredits ??= 0;
30
36
alliance.VaultRegularCredits += request.RegularCredits;
@@ -39,30 +45,44 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
39
45
return;
40
46
}
41
47
42
const guildMember = (await GuildMember.findOne(
43
{ accountId, guildId: guild._id },
44
"RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed"
45
))!;
48
let guild: TGuildDatabaseDocument;
49
let guildMember: TGuildMemberDatabaseDocument | undefined;
50
if (request.GuildVault) {
51
guild = (await Guild.findById(request.GuildVault))!;
52
} else {
53
guild = await getGuildForRequestEx(req, inventory);
54
guildMember = (await GuildMember.findOne(
55
{ accountId, guildId: guild._id },
56
"RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed"
57
))!;
58
}
59
46
60
if (request.RegularCredits) {
47
61
updateCurrency(inventory, request.RegularCredits, false);
48
62
49
63
guild.VaultRegularCredits ??= 0;
50
64
guild.VaultRegularCredits += request.RegularCredits;
51
65
52
guildMember.RegularCreditsContributed ??= 0;
53
guildMember.RegularCreditsContributed += request.RegularCredits;
66
if (guildMember) {
67
guildMember.RegularCreditsContributed ??= 0;
68
guildMember.RegularCreditsContributed += request.RegularCredits;
69
}
54
70
}
55
71
if (request.MiscItems.length) {
56
72
addVaultMiscItems(guild, request.MiscItems);
57
73
for (const item of request.MiscItems) {
58
addGuildMemberMiscItemContribution(guildMember, item);
74
if (guildMember) {
75
addGuildMemberMiscItemContribution(guildMember, item);
76
}
59
77
addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
60
78
}
61
79
}
62
80
if (request.ShipDecorations.length) {
63
81
addVaultShipDecos(guild, request.ShipDecorations);
64
82
for (const item of request.ShipDecorations) {
65
addGuildMemberShipDecoContribution(guildMember, item);
83
if (guildMember) {
84
addGuildMemberShipDecoContribution(guildMember, item);
85
}
66
86
addShipDecorations(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
67
87
}
68
88
}
@@ -73,7 +93,12 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
73
93
}
74
94
}
75
95
76
await Promise.all([guild.save(), inventory.save(), guildMember.save()]);
96
const promises: Promise<unknown>[] = [guild.save(), inventory.save()];
97
if (guildMember) {
98
promises.push(guildMember.save());
99
}
100
await Promise.all(promises);
101
77
102
res.end();
78
103
};
79
104
@@ -84,4 +109,5 @@ interface IContributeToVaultRequest {
84
109
FusionTreasures: IFusionTreasure[];
85
110
Alliance?: boolean;
86
111
FromVault?: boolean;
112
GuildVault?: string;
87
113
}
@@ -239,6 +239,13 @@ guildMemberSchema.index({ RequestExpiry: 1 }, { expireAfterSeconds: 0 });
239
239
240
240
export const GuildMember = model<IGuildMemberDatabase>("GuildMember", guildMemberSchema);
241
241
242
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
243
export type TGuildMemberDatabaseDocument = Document<unknown, {}, IGuildMemberDatabase> &
244
IGuildMemberDatabase & {
245
_id: Types.ObjectId;
246
__v: number;
247
};
248
242
249
const guildAdSchema = new Schema<IGuildAdDatabase>({
243
250
GuildId: { type: Schema.Types.ObjectId, required: true },
244
251
Emblem: Boolean,