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 {
|
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;
|
||||||
|
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 },
|
{ accountId, guildId: guild._id },
|
||||||
"RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed"
|
"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;
|
||||||
|
|
||||||
|
if (guildMember) {
|
||||||
guildMember.RegularCreditsContributed ??= 0;
|
guildMember.RegularCreditsContributed ??= 0;
|
||||||
guildMember.RegularCreditsContributed += request.RegularCredits;
|
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) {
|
||||||
|
if (guildMember) {
|
||||||
addGuildMemberMiscItemContribution(guildMember, item);
|
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) {
|
||||||
|
if (guildMember) {
|
||||||
addGuildMemberShipDecoContribution(guildMember, item);
|
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;
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user