From 0b07efa1b03042ccd7707109f5428e8f96d52980 Mon Sep 17 00:00:00 2001 From: Sainan Date: Tue, 4 Mar 2025 19:15:35 +0100 Subject: [PATCH] feat: rushing decos --- .../contributeToDojoComponentController.ts | 7 +--- .../api/dojoComponentRushController.ts | 42 ++++++++++++------- src/types/guildTypes.ts | 6 +++ 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/controllers/api/contributeToDojoComponentController.ts b/src/controllers/api/contributeToDojoComponentController.ts index 201c2050..2a6b8a56 100644 --- a/src/controllers/api/contributeToDojoComponentController.ts +++ b/src/controllers/api/contributeToDojoComponentController.ts @@ -2,6 +2,7 @@ import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/invento import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService"; import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IDojoContributable } from "@/src/types/guildTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { RequestHandler } from "express"; @@ -53,12 +54,6 @@ export const contributeToDojoComponentController: RequestHandler = async (req, r }); }; -interface IDojoContributable { - RegularCredits?: number; - MiscItems?: IMiscItem[]; - CompletionTime?: Date; -} - const processContribution = ( request: IContributeToDojoComponentRequest, inventory: TInventoryDatabaseDocument, diff --git a/src/controllers/api/dojoComponentRushController.ts b/src/controllers/api/dojoComponentRushController.ts index 91f5f13e..3058f8ef 100644 --- a/src/controllers/api/dojoComponentRushController.ts +++ b/src/controllers/api/dojoComponentRushController.ts @@ -1,8 +1,18 @@ import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService"; import { getInventory, updateCurrency } from "@/src/services/inventoryService"; import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IDojoContributable } from "@/src/types/guildTypes"; import { RequestHandler } from "express"; -import { ExportDojoRecipes } from "warframe-public-export-plus"; +import { ExportDojoRecipes, IDojoRecipe } from "warframe-public-export-plus"; + +interface IDojoComponentRushRequest { + DecoType?: string; + DecoId?: string; + ComponentId: string; + Amount: number; + VaultAmount: number; + AllianceVaultAmount: number; +} export const dojoComponentRushController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -10,14 +20,16 @@ export const dojoComponentRushController: RequestHandler = async (req, res) => { 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 - ); + if (request.DecoId) { + const deco = component.Decos!.find(x => x._id.equals(request.DecoId))!; + const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type)!; + processContribution(deco, meta, request.Amount); + } else { + const meta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!; + processContribution(component, meta, request.Amount); + } + const inventoryChanges = updateCurrency(inventory, request.Amount, true); await guild.save(); @@ -28,9 +40,11 @@ export const dojoComponentRushController: RequestHandler = async (req, res) => { }); }; -interface IDojoComponentRushRequest { - ComponentId: string; - Amount: number; - VaultAmount: number; - AllianceVaultAmount: number; -} +const processContribution = (component: IDojoContributable, meta: IDojoRecipe, platinumDonated: number): void => { + const fullPlatinumCost = scaleRequiredCount(meta.skipTimePrice); + const fullDurationSeconds = meta.time; + const secondsPerPlatinum = fullDurationSeconds / fullPlatinumCost; + component.CompletionTime = new Date( + component.CompletionTime!.getTime() - secondsPerPlatinum * platinumDonated * 1000 + ); +}; diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 50ff178a..176cfeea 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -81,3 +81,9 @@ export interface ITechProjectClient { export interface ITechProjectDatabase extends Omit { CompletionDate?: Date; } + +export interface IDojoContributable { + RegularCredits?: number; + MiscItems?: IMiscItem[]; + CompletionTime?: Date; +}