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: view clan contributions (#1340)

Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1340

d9b94417
Sainan <sainan@calamity.inc>
提交于

代码差异

9 个文件 +80 -12
Modified src/controllers/api/contributeToDojoComponentController.ts +16 -4
@@ -1,4 +1,4 @@
1 import { TGuildDatabaseDocument } from "@/src/models/guildModel";
1 import { GuildMember, TGuildDatabaseDocument } from "@/src/models/guildModel";
2 2 import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
3 3 import {
4 4 getDojoClient,
@@ -10,7 +10,7 @@ import {
10 10 } from "@/src/services/guildService";
11 11 import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
12 12 import { getAccountIdForRequest } from "@/src/services/loginService";
13 import { IDojoContributable } from "@/src/types/guildTypes";
13 import { IDojoContributable, IGuildMemberDatabase } from "@/src/types/guildTypes";
14 14 import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
15 15 import { IInventoryChanges } from "@/src/types/purchaseTypes";
16 16 import { RequestHandler } from "express";
@@ -35,6 +35,10 @@ export const contributeToDojoComponentController: RequestHandler = async (req, r
35 35 return;
36 36 }
37 37 const guild = await getGuildForRequestEx(req, inventory);
38 const guildMember = (await GuildMember.findOne(
39 { accountId, guildId: guild._id },
40 "RegularCreditsContributed MiscItemsContributed"
41 ))!;
38 42 const request = JSON.parse(String(req.body)) as IContributeToDojoComponentRequest;
39 43 const component = guild.DojoComponents.id(request.ComponentId)!;
40 44
@@ -45,7 +49,7 @@ export const contributeToDojoComponentController: RequestHandler = async (req, r
45 49 throw new Error("attempt to contribute to a deco in an unfinished room?!");
46 50 }
47 51 const meta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!;
48 processContribution(guild, request, inventory, inventoryChanges, meta, component);
52 processContribution(guild, guildMember, request, inventory, inventoryChanges, meta, component);
49 53 // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
50 54 if (component.CompletionTime) {
51 55 setDojoRoomLogFunded(guild, component);
@@ -55,12 +59,13 @@ export const contributeToDojoComponentController: RequestHandler = async (req, r
55 59 if (request.DecoId) {
56 60 const deco = component.Decos!.find(x => x._id.equals(request.DecoId))!;
57 61 const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type)!;
58 processContribution(guild, request, inventory, inventoryChanges, meta, deco);
62 processContribution(guild, guildMember, request, inventory, inventoryChanges, meta, deco);
59 63 }
60 64 }
61 65
62 66 await guild.save();
63 67 await inventory.save();
68 await guildMember.save();
64 69 res.json({
65 70 ...(await getDojoClient(guild, 0, component._id)),
66 71 InventoryChanges: inventoryChanges
@@ -69,6 +74,7 @@ export const contributeToDojoComponentController: RequestHandler = async (req, r
69 74
70 75 const processContribution = (
71 76 guild: TGuildDatabaseDocument,
77 guildMember: IGuildMemberDatabase,
72 78 request: IContributeToDojoComponentRequest,
73 79 inventory: TInventoryDatabaseDocument,
74 80 inventoryChanges: IInventoryChanges,
@@ -80,6 +86,9 @@ const processContribution = (
80 86 component.RegularCredits += request.RegularCredits;
81 87 inventoryChanges.RegularCredits = -request.RegularCredits;
82 88 updateCurrency(inventory, request.RegularCredits, false);
89
90 guildMember.RegularCreditsContributed ??= 0;
91 guildMember.RegularCreditsContributed += request.RegularCredits;
83 92 }
84 93 if (request.VaultCredits) {
85 94 component.RegularCredits += request.VaultCredits;
@@ -133,6 +142,9 @@ const processContribution = (
133 142 ItemType: ingredientContribution.ItemType,
134 143 ItemCount: ingredientContribution.ItemCount * -1
135 144 });
145
146 guildMember.MiscItemsContributed ??= [];
147 guildMember.MiscItemsContributed.push(ingredientContribution);
136 148 }
137 149 addMiscItems(inventory, miscItemChanges);
138 150 inventoryChanges.MiscItems = miscItemChanges;
Modified src/controllers/api/contributeToVaultController.ts +13 -0
@@ -1,3 +1,4 @@
1 import { GuildMember } from "@/src/models/guildModel";
1 2 import { getGuildForRequestEx } from "@/src/services/guildService";
2 3 import { addFusionTreasures, addMiscItems, addShipDecorations, getInventory } from "@/src/services/inventoryService";
3 4 import { getAccountIdForRequest } from "@/src/services/loginService";
@@ -8,23 +9,34 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
8 9 const accountId = await getAccountIdForRequest(req);
9 10 const inventory = await getInventory(accountId);
10 11 const guild = await getGuildForRequestEx(req, inventory);
12 const guildMember = (await GuildMember.findOne(
13 { accountId, guildId: guild._id },
14 "RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed"
15 ))!;
11 16 const request = JSON.parse(String(req.body)) as IContributeToVaultRequest;
12 17
13 18 if (request.RegularCredits) {
14 19 guild.VaultRegularCredits ??= 0;
15 20 guild.VaultRegularCredits += request.RegularCredits;
21
22 guildMember.RegularCreditsContributed ??= 0;
23 guildMember.RegularCreditsContributed += request.RegularCredits;
16 24 }
17 25 if (request.MiscItems.length) {
18 26 guild.VaultMiscItems ??= [];
27 guildMember.MiscItemsContributed ??= [];
19 28 for (const item of request.MiscItems) {
20 29 guild.VaultMiscItems.push(item);
30 guildMember.MiscItemsContributed.push(item);
21 31 addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
22 32 }
23 33 }
24 34 if (request.ShipDecorations.length) {
25 35 guild.VaultShipDecorations ??= [];
36 guildMember.ShipDecorationsContributed ??= [];
26 37 for (const item of request.ShipDecorations) {
27 38 guild.VaultShipDecorations.push(item);
39 guildMember.ShipDecorationsContributed.push(item);
28 40 addShipDecorations(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
29 41 }
30 42 }
@@ -38,6 +50,7 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
38 50
39 51 await guild.save();
40 52 await inventory.save();
53 await guildMember.save();
41 54 res.end();
42 55 };
43 56
Modified src/controllers/api/dojoComponentRushController.ts +7 -0
@@ -1,3 +1,4 @@
1 import { GuildMember } from "@/src/models/guildModel";
1 2 import { getDojoClient, getGuildForRequestEx, hasAccessToDojo, scaleRequiredCount } from "@/src/services/guildService";
2 3 import { getInventory, updateCurrency } from "@/src/services/inventoryService";
3 4 import { getAccountIdForRequest } from "@/src/services/loginService";
@@ -48,6 +49,12 @@ export const dojoComponentRushController: RequestHandler = async (req, res) => {
48 49
49 50 await guild.save();
50 51 await inventory.save();
52
53 const guildMember = (await GuildMember.findOne({ accountId, guildId: guild._id }, "PremiumCreditsContributed"))!;
54 guildMember.PremiumCreditsContributed ??= 0;
55 guildMember.PremiumCreditsContributed += request.Amount;
56 await guildMember.save();
57
51 58 res.json({
52 59 ...(await getDojoClient(guild, 0, component._id)),
53 60 InventoryChanges: inventoryChanges
Added src/controllers/api/getGuildContributionsController.ts +18 -0
@@ -0,0 +1,18 @@
1 import { GuildMember } from "@/src/models/guildModel";
2 import { getInventory } from "@/src/services/inventoryService";
3 import { getAccountIdForRequest } from "@/src/services/loginService";
4 import { RequestHandler } from "express";
5
6 export const getGuildContributionsController: RequestHandler = async (req, res) => {
7 const accountId = await getAccountIdForRequest(req);
8 const guildId = (await getInventory(accountId, "GuildId")).GuildId;
9 const guildMember = (await GuildMember.findOne({ guildId, accountId: req.query.buddyId }))!;
10 res.json({
11 _id: { $oid: req.query.buddyId },
12 RegularCreditsContributed: guildMember.RegularCreditsContributed,
13 PremiumCreditsContributed: guildMember.PremiumCreditsContributed,
14 MiscItemsContributed: guildMember.MiscItemsContributed,
15 ConsumablesContributed: [], // ???
16 ShipDecorationsContributed: guildMember.ShipDecorationsContributed
17 });
18 };
Modified src/controllers/api/guildTechController.ts +14 -1
@@ -21,7 +21,7 @@ import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
21 21 import { IInventoryChanges } from "@/src/types/purchaseTypes";
22 22 import { config } from "@/src/services/configService";
23 23 import { GuildPermission, ITechProjectClient, ITechProjectDatabase } from "@/src/types/guildTypes";
24 import { TGuildDatabaseDocument } from "@/src/models/guildModel";
24 import { GuildMember, TGuildDatabaseDocument } from "@/src/models/guildModel";
25 25 import { toMongoDate } from "@/src/helpers/inventoryHelpers";
26 26 import { logger } from "@/src/utils/logger";
27 27
@@ -90,6 +90,12 @@ export const guildTechController: RequestHandler = async (req, res) => {
90 90 res.status(400).send("-1").end();
91 91 return;
92 92 }
93
94 const guildMember = (await GuildMember.findOne(
95 { accountId, guildId: guild._id },
96 "RegularCreditsContributed MiscItemsContributed"
97 ))!;
98
93 99 const contributions = data;
94 100 const techProject = guild.TechProjects!.find(x => x.ItemType == contributions.RecipeType)!;
95 101
@@ -106,6 +112,9 @@ export const guildTechController: RequestHandler = async (req, res) => {
106 112 }
107 113 techProject.ReqCredits -= contributions.RegularCredits;
108 114
115 guildMember.RegularCreditsContributed ??= 0;
116 guildMember.RegularCreditsContributed += contributions.RegularCredits;
117
109 118 if (contributions.VaultMiscItems.length) {
110 119 for (const miscItem of contributions.VaultMiscItems) {
111 120 const reqItem = techProject.ReqItems.find(x => x.ItemType == miscItem.ItemType);
@@ -133,6 +142,9 @@ export const guildTechController: RequestHandler = async (req, res) => {
133 142 ItemType: miscItem.ItemType,
134 143 ItemCount: miscItem.ItemCount * -1
135 144 });
145
146 guildMember.MiscItemsContributed ??= [];
147 guildMember.MiscItemsContributed.push(miscItem);
136 148 }
137 149 }
138 150 addMiscItems(inventory, miscItemChanges);
@@ -151,6 +163,7 @@ export const guildTechController: RequestHandler = async (req, res) => {
151 163
152 164 await guild.save();
153 165 await inventory.save();
166 await guildMember.save();
154 167 res.json({
155 168 InventoryChanges: inventoryChanges,
156 169 Vault: getGuildVault(guild)
Modified src/models/guildModel.ts +5 -1
@@ -215,7 +215,11 @@ const guildMemberSchema = new Schema<IGuildMemberDatabase>({
215 215 accountId: Types.ObjectId,
216 216 guildId: Types.ObjectId,
217 217 status: { type: Number, required: true },
218 rank: { type: Number, default: 7 }
218 rank: { type: Number, default: 7 },
219 RegularCreditsContributed: Number,
220 PremiumCreditsContributed: Number,
221 MiscItemsContributed: { type: [typeCountSchema], default: undefined },
222 ShipDecorationsContributed: { type: [typeCountSchema], default: undefined }
219 223 });
220 224
221 225 guildMemberSchema.index({ accountId: 1, guildId: 1 }, { unique: true });
Modified src/routes/api.ts +2 -0
@@ -42,6 +42,7 @@ import { genericUpdateController } from "@/src/controllers/api/genericUpdateCont
42 42 import { getAllianceController } from "@/src/controllers/api/getAllianceController";
43 43 import { getDailyDealStockLevelsController } from "@/src/controllers/api/getDailyDealStockLevelsController";
44 44 import { getFriendsController } from "@/src/controllers/api/getFriendsController";
45 import { getGuildContributionsController } from "@/src/controllers/api/getGuildContributionsController";
45 46 import { getGuildController } from "@/src/controllers/api/getGuildController";
46 47 import { getGuildDojoController } from "@/src/controllers/api/getGuildDojoController";
47 48 import { getGuildLogController } from "@/src/controllers/api/getGuildLogController";
@@ -139,6 +140,7 @@ apiRouter.get("/drones.php", dronesController);
139 140 apiRouter.get("/getDailyDealStockLevels.php", getDailyDealStockLevelsController);
140 141 apiRouter.get("/getFriends.php", getFriendsController);
141 142 apiRouter.get("/getGuild.php", getGuildController);
143 apiRouter.get("/getGuildContributions.php", getGuildContributionsController);
142 144 apiRouter.get("/getGuildDojo.php", getGuildDojoController);
143 145 apiRouter.get("/getGuildLog.php", getGuildLogController);
144 146 apiRouter.get("/getIgnoredUsers.php", getIgnoredUsersController);
Modified src/services/guildService.ts +1 -6
@@ -58,12 +58,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
58 58 if (guildMember.accountId.equals(accountId)) {
59 59 missingEntry = false;
60 60 } else {
61 member.DisplayName = (await Account.findOne(
62 {
63 _id: guildMember.accountId
64 },
65 "DisplayName"
66 ))!.DisplayName;
61 member.DisplayName = (await Account.findById(guildMember.accountId, "DisplayName"))!.DisplayName;
67 62 await fillInInventoryDataForGuildMember(member);
68 63 }
69 64 members.push(member);
Modified src/types/guildTypes.ts +4 -0
@@ -88,6 +88,10 @@ export interface IGuildMemberDatabase {
88 88 guildId: Types.ObjectId;
89 89 status: number;
90 90 rank: number;
91 RegularCreditsContributed?: number;
92 PremiumCreditsContributed?: number;
93 MiscItemsContributed?: IMiscItem[];
94 ShipDecorationsContributed?: ITypeCount[];
91 95 }
92 96
93 97 export interface IGuildMemberClient {