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
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:
parent
2746e243c9
commit
6fefe99e49
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user