diff --git a/src/controllers/api/dojoComponentRushController.ts b/src/controllers/api/dojoComponentRushController.ts new file mode 100644 index 00000000..91f5f13e --- /dev/null +++ b/src/controllers/api/dojoComponentRushController.ts @@ -0,0 +1,36 @@ +import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService"; +import { getInventory, updateCurrency } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { RequestHandler } from "express"; +import { ExportDojoRecipes } from "warframe-public-export-plus"; + +export const dojoComponentRushController: 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 IDojoComponentRushRequest; + const component = guild.DojoComponents.id(request.ComponentId)!; + const componentMeta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!; + + const fullPlatinumCost = scaleRequiredCount(componentMeta.skipTimePrice); + const fullDurationSeconds = componentMeta.time; + const secondsPerPlatinum = fullDurationSeconds / fullPlatinumCost; + component.CompletionTime = new Date( + component.CompletionTime!.getTime() - secondsPerPlatinum * request.Amount * 1000 + ); + const inventoryChanges = updateCurrency(inventory, request.Amount, true); + + await guild.save(); + await inventory.save(); + res.json({ + ...getDojoClient(guild, 0, component._id), + InventoryChanges: inventoryChanges + }); +}; + +interface IDojoComponentRushRequest { + ComponentId: string; + Amount: number; + VaultAmount: number; + AllianceVaultAmount: number; +} diff --git a/src/routes/api.ts b/src/routes/api.ts index 988d5207..3437d665 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -16,6 +16,7 @@ import { contributeToDojoComponentController } from "@/src/controllers/api/contr import { createGuildController } from "@/src/controllers/api/createGuildController"; import { creditsController } from "@/src/controllers/api/creditsController"; import { deleteSessionController } from "@/src/controllers/api/deleteSessionController"; +import { dojoComponentRushController } from "@/src/controllers/api/dojoComponentRushController"; import { dojoController } from "@/src/controllers/api/dojoController"; import { dronesController } from "@/src/controllers/api/dronesController"; import { endlessXpController } from "@/src/controllers/api/endlessXpController"; @@ -149,6 +150,7 @@ apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController); apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController); apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController); apiRouter.post("/createGuild.php", createGuildController); +apiRouter.post("/dojoComponentRush.php", dojoComponentRushController); apiRouter.post("/drones.php", dronesController); apiRouter.post("/endlessXp.php", endlessXpController); apiRouter.post("/evolveWeapon.php", evolveWeaponController); diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 05c60aee..4b909708 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -39,14 +39,20 @@ export interface IDojoComponentClient { RegularCredits?: number; // "Collecting Materials" state: Number of credits that were donated. MiscItems?: IMiscItem[]; // "Collecting Materials" state: Resources that were donated. CompletionTime?: IMongoDate; + RushPlatinum?: number; + DestructionTime?: IMongoDate; DecoCapacity?: number; } export interface IDojoComponentDatabase - extends Omit { + extends Omit< + IDojoComponentClient, + "id" | "pi" | "CompletionTime" | "RushPlatinum" | "DestructionTime" | "DecoCapacity" + > { _id: Types.ObjectId; pi?: Types.ObjectId; CompletionTime?: Date; + //DestructionTime?: Date; } export interface ITechProjectClient {