feat: contribute to allied clan vault (#1462)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled

Reviewed-on: #1462
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
Sainan 2025-04-05 06:51:23 -07:00 committed by Sainan
parent 743a905de4
commit 6bb74b026a
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 {
addGuildMemberMiscItemContribution,
addGuildMemberShipDecoContribution,
@ -21,10 +27,10 @@ import { RequestHandler } from "express";
export const contributeToVaultController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
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;
if (request.Alliance) {
const guild = await getGuildForRequestEx(req, inventory);
const alliance = (await Alliance.findById(guild.AllianceId!))!;
alliance.VaultRegularCredits ??= 0;
alliance.VaultRegularCredits += request.RegularCredits;
@ -39,30 +45,44 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
return;
}
const guildMember = (await GuildMember.findOne(
let guild: TGuildDatabaseDocument;
let guildMember: TGuildMemberDatabaseDocument | undefined;
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) {
updateCurrency(inventory, request.RegularCredits, false);
guild.VaultRegularCredits ??= 0;
guild.VaultRegularCredits += request.RegularCredits;
if (guildMember) {
guildMember.RegularCreditsContributed ??= 0;
guildMember.RegularCreditsContributed += request.RegularCredits;
}
}
if (request.MiscItems.length) {
addVaultMiscItems(guild, request.MiscItems);
for (const item of request.MiscItems) {
if (guildMember) {
addGuildMemberMiscItemContribution(guildMember, item);
}
addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
if (request.ShipDecorations.length) {
addVaultShipDecos(guild, request.ShipDecorations);
for (const item of request.ShipDecorations) {
if (guildMember) {
addGuildMemberShipDecoContribution(guildMember, item);
}
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();
};
@ -84,4 +109,5 @@ interface IContributeToVaultRequest {
FusionTreasures: IFusionTreasure[];
Alliance?: boolean;
FromVault?: boolean;
GuildVault?: string;
}

View File

@ -239,6 +239,13 @@ guildMemberSchema.index({ RequestExpiry: 1 }, { expireAfterSeconds: 0 });
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>({
GuildId: { type: Schema.Types.ObjectId, required: true },
Emblem: Boolean,