XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 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
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

2 个文件 +44 -11
Modified src/controllers/api/contributeToVaultController.ts +37 -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 }
Modified src/models/guildModel.ts +7 -0
@@ -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,