feat: clan vault 3 - donate at treasury
All checks were successful
Build / build (20) (push) Successful in 37s
Build / build (18) (push) Successful in 59s
Build / build (22) (push) Successful in 54s
Build / build (18) (pull_request) Successful in 41s
Build / build (20) (pull_request) Successful in 59s
Build / build (22) (pull_request) Successful in 55s

This commit is contained in:
Sainan 2025-03-06 17:58:46 +01:00
parent f7ab620c80
commit 512f3a6ae9
6 changed files with 60 additions and 3 deletions

View File

@ -0,0 +1,49 @@
import { getGuildForRequestEx } from "@/src/services/guildService";
import { addFusionTreasures, addMiscItems, addShipDecorations, getInventory } from "@/src/services/inventoryService";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { IFusionTreasure, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes";
import { RequestHandler } from "express";
export const contributeToVaultController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const guild = await getGuildForRequestEx(req, inventory);
const request = JSON.parse(String(req.body)) as IContributeToVaultRequest;
if (request.RegularCredits) {
guild.VaultRegularCredits ??= 0;
guild.VaultRegularCredits += request.RegularCredits;
}
if (request.MiscItems.length) {
guild.VaultMiscItems ??= [];
for (const item of request.MiscItems) {
guild.VaultMiscItems.push(item);
addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
if (request.ShipDecorations.length) {
guild.VaultShipDecorations ??= [];
for (const item of request.ShipDecorations) {
guild.VaultShipDecorations.push(item);
addShipDecorations(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
if (request.FusionTreasures.length) {
guild.VaultFusionTreasures ??= [];
for (const item of request.FusionTreasures) {
guild.VaultFusionTreasures.push(item);
addFusionTreasures(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
await guild.save();
await inventory.save();
res.end();
};
interface IContributeToVaultRequest {
RegularCredits: number;
MiscItems: IMiscItem[];
ShipDecorations: ITypeCount[];
FusionTreasures: IFusionTreasure[];
}

View File

@ -6,7 +6,7 @@ import {
IDojoDecoDatabase
} from "@/src/types/guildTypes";
import { Document, Model, model, Schema, Types } from "mongoose";
import { typeCountSchema } from "./inventoryModels/inventoryModel";
import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
import { toMongoDate } from "../helpers/inventoryHelpers";
const dojoDecoSchema = new Schema<IDojoDecoDatabase>({
@ -68,6 +68,8 @@ const guildSchema = new Schema<IGuildDatabase>(
VaultRegularCredits: Number,
VaultPremiumCredits: Number,
VaultMiscItems: { type: [typeCountSchema], default: undefined },
VaultShipDecorations: { type: [typeCountSchema], default: undefined },
VaultFusionTreasures: { type: [fusionTreasuresSchema], default: undefined },
TechProjects: { type: [techProjectSchema], default: undefined }
},
{ id: false }

View File

@ -552,7 +552,7 @@ questKeysSchema.set("toJSON", {
}
});
const fusionTreasuresSchema = new Schema<IFusionTreasure>().add(typeCountSchema).add({ Sockets: Number });
export const fusionTreasuresSchema = new Schema<IFusionTreasure>().add(typeCountSchema).add({ Sockets: Number });
const spectreLoadoutsSchema = new Schema<ISpectreLoadout>(
{

View File

@ -14,6 +14,7 @@ import { claimLibraryDailyTaskRewardController } from "@/src/controllers/api/cla
import { clearDialogueHistoryController } from "@/src/controllers/api/clearDialogueHistoryController";
import { completeRandomModChallengeController } from "@/src/controllers/api/completeRandomModChallengeController";
import { contributeToDojoComponentController } from "@/src/controllers/api/contributeToDojoComponentController";
import { contributeToVaultController } from "@/src/controllers/api/contributeToVaultController";
import { createGuildController } from "@/src/controllers/api/createGuildController";
import { creditsController } from "@/src/controllers/api/creditsController";
import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
@ -153,6 +154,7 @@ apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController);
apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController);
apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
apiRouter.post("/contributeToVault.php", contributeToVaultController);
apiRouter.post("/createGuild.php", createGuildController);
apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController);
apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);

View File

@ -40,7 +40,9 @@ export const getGuildVault = (guild: TGuildDatabaseDocument): IGuildVault => {
return {
DojoRefundRegularCredits: guild.VaultRegularCredits,
DojoRefundMiscItems: guild.VaultMiscItems,
DojoRefundPremiumCredits: guild.VaultPremiumCredits
DojoRefundPremiumCredits: guild.VaultPremiumCredits,
ShipDecorations: guild.VaultShipDecorations,
FusionTreasures: guild.VaultFusionTreasures
};
};

View File

@ -14,6 +14,8 @@ export interface IGuildDatabase extends IGuild {
VaultRegularCredits?: number;
VaultPremiumCredits?: number;
VaultMiscItems?: IMiscItem[];
VaultShipDecorations?: ITypeCount[];
VaultFusionTreasures?: IFusionTreasure[];
TechProjects?: ITechProjectDatabase[];
}