返回提交历史
Modified
src/controllers/api/contributeToDojoComponentController.ts
+16
-4
Modified
src/controllers/api/contributeToVaultController.ts
+13
-0
Modified
src/controllers/api/dojoComponentRushController.ts
+7
-0
Added
src/controllers/api/getGuildContributionsController.ts
+18
-0
Modified
src/controllers/api/guildTechController.ts
+14
-1
Modified
src/models/guildModel.ts
+5
-1
Modified
src/routes/api.ts
+2
-0
Modified
src/services/guildService.ts
+1
-6
Modified
src/types/guildTypes.ts
+4
-0
XFEstudio/SpaceNinjaServer
feat: view clan contributions (#1340)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1340
d9b94417
代码差异
9 个文件
+80
-12
@@ -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;
@@ -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
@@ -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
@@ -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
};
@@ -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)
@@ -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 });
@@ -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);
@@ -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);
@@ -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 {