feat: contribute to allied clan vault
All checks were successful
Build / build (22) (push) Successful in 36s
Build / build (20) (push) Successful in 1m10s
Build / build (18) (push) Successful in 1m13s
Build / build (18) (pull_request) Successful in 39s
Build / build (20) (pull_request) Successful in 1m10s
Build / build (22) (pull_request) Successful in 1m9s

This commit is contained in:
Sainan 2025-04-04 23:16:39 +02:00
parent 2746e243c9
commit 6fefe99e49
2 changed files with 44 additions and 11 deletions

View File

@ -1,4 +1,10 @@
import { Alliance, GuildMember } from "@/src/models/guildModel"; import {
Alliance,
Guild,
GuildMember,
TGuildDatabaseDocument,
TGuildMemberDatabaseDocument
} from "@/src/models/guildModel";
import { import {
addGuildMemberMiscItemContribution, addGuildMemberMiscItemContribution,
addGuildMemberShipDecoContribution, addGuildMemberShipDecoContribution,
@ -21,10 +27,10 @@ import { RequestHandler } from "express";
export const contributeToVaultController: RequestHandler = async (req, res) => { export const contributeToVaultController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req); const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId RegularCredits MiscItems ShipDecorations FusionTreasures"); const inventory = await getInventory(accountId, "GuildId RegularCredits MiscItems ShipDecorations FusionTreasures");
const guild = await getGuildForRequestEx(req, inventory);
const request = JSON.parse(String(req.body)) as IContributeToVaultRequest; const request = JSON.parse(String(req.body)) as IContributeToVaultRequest;
if (request.Alliance) { if (request.Alliance) {
const guild = await getGuildForRequestEx(req, inventory);
const alliance = (await Alliance.findById(guild.AllianceId!))!; const alliance = (await Alliance.findById(guild.AllianceId!))!;
alliance.VaultRegularCredits ??= 0; alliance.VaultRegularCredits ??= 0;
alliance.VaultRegularCredits += request.RegularCredits; alliance.VaultRegularCredits += request.RegularCredits;
@ -39,30 +45,44 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
return; return;
} }
const guildMember = (await GuildMember.findOne( let guild: TGuildDatabaseDocument;
{ accountId, guildId: guild._id }, let guildMember: TGuildMemberDatabaseDocument | undefined;
"RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed" if (request.GuildVault) {
))!; guild = (await Guild.findById(request.GuildVault))!;
} else {
guild = await getGuildForRequestEx(req, inventory);
guildMember = (await GuildMember.findOne(
{ accountId, guildId: guild._id },
"RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed"
))!;
}
if (request.RegularCredits) { if (request.RegularCredits) {
updateCurrency(inventory, request.RegularCredits, false); updateCurrency(inventory, request.RegularCredits, false);
guild.VaultRegularCredits ??= 0; guild.VaultRegularCredits ??= 0;
guild.VaultRegularCredits += request.RegularCredits; guild.VaultRegularCredits += request.RegularCredits;
guildMember.RegularCreditsContributed ??= 0; if (guildMember) {
guildMember.RegularCreditsContributed += request.RegularCredits; guildMember.RegularCreditsContributed ??= 0;
guildMember.RegularCreditsContributed += request.RegularCredits;
}
} }
if (request.MiscItems.length) { if (request.MiscItems.length) {
addVaultMiscItems(guild, request.MiscItems); addVaultMiscItems(guild, request.MiscItems);
for (const item of request.MiscItems) { for (const item of request.MiscItems) {
addGuildMemberMiscItemContribution(guildMember, item); if (guildMember) {
addGuildMemberMiscItemContribution(guildMember, item);
}
addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]); addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
} }
} }
if (request.ShipDecorations.length) { if (request.ShipDecorations.length) {
addVaultShipDecos(guild, request.ShipDecorations); addVaultShipDecos(guild, request.ShipDecorations);
for (const item of request.ShipDecorations) { for (const item of request.ShipDecorations) {
addGuildMemberShipDecoContribution(guildMember, item); if (guildMember) {
addGuildMemberShipDecoContribution(guildMember, item);
}
addShipDecorations(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]); addShipDecorations(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
} }
} }
@ -73,7 +93,12 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
} }
} }
await Promise.all([guild.save(), inventory.save(), guildMember.save()]); const promises: Promise<unknown>[] = [guild.save(), inventory.save()];
if (guildMember) {
promises.push(guildMember.save());
}
await Promise.all(promises);
res.end(); res.end();
}; };
@ -84,4 +109,5 @@ interface IContributeToVaultRequest {
FusionTreasures: IFusionTreasure[]; FusionTreasures: IFusionTreasure[];
Alliance?: boolean; Alliance?: boolean;
FromVault?: boolean; FromVault?: boolean;
GuildVault?: string;
} }

View File

@ -239,6 +239,13 @@ guildMemberSchema.index({ RequestExpiry: 1 }, { expireAfterSeconds: 0 });
export const GuildMember = model<IGuildMemberDatabase>("GuildMember", guildMemberSchema); export const GuildMember = model<IGuildMemberDatabase>("GuildMember", guildMemberSchema);
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
export type TGuildMemberDatabaseDocument = Document<unknown, {}, IGuildMemberDatabase> &
IGuildMemberDatabase & {
_id: Types.ObjectId;
__v: number;
};
const guildAdSchema = new Schema<IGuildAdDatabase>({ const guildAdSchema = new Schema<IGuildAdDatabase>({
GuildId: { type: Schema.Types.ObjectId, required: true }, GuildId: { type: Schema.Types.ObjectId, required: true },
Emblem: Boolean, Emblem: Boolean,