feat: dojo decorations #1079

Merged
Sainan merged 13 commits from dojo-decos into main 2025-03-05 23:54:48 -08:00
Showing only changes of commit a0ccf17130 - Show all commits

View File

@ -1,3 +1,4 @@
import { TGuildDatabaseDocument } from "@/src/models/guildModel";
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService";
import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
@ -36,13 +37,13 @@ export const contributeToDojoComponentController: RequestHandler = async (req, r
throw new Error("attempt to contribute to a deco in an unfinished room?!");
}
const meta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!;
processContribution(request, inventory, inventoryChanges, meta, component);
await processContribution(guild, request, inventory, inventoryChanges, meta, component);
} else {
// Room is past "Collecting Materials"
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(request, inventory, inventoryChanges, meta, deco);
await processContribution(guild, request, inventory, inventoryChanges, meta, deco);
}
}
@ -54,13 +55,14 @@ export const contributeToDojoComponentController: RequestHandler = async (req, r
});
};
const processContribution = (
const processContribution = async (
guild: TGuildDatabaseDocument,
request: IContributeToDojoComponentRequest,
inventory: TInventoryDatabaseDocument,
inventoryChanges: IInventoryChanges,
meta: IDojoRecipe,
component: IDojoContributable
): void => {
): Promise<void> => {
component.RegularCredits ??= 0;
if (component.RegularCredits + request.RegularCredits > scaleRequiredCount(meta.price)) {
request.RegularCredits = scaleRequiredCount(meta.price) - component.RegularCredits;
@ -104,6 +106,10 @@ const processContribution = (
}
}
if (fullyFunded) {
if (request.IngredientContributions.length) {
// We've already updated subpaths of MiscItems, we need to allow MongoDB to save this before we remove MiscItems.
await guild.save();
}
component.RegularCredits = undefined;
component.MiscItems = undefined;
component.CompletionTime = new Date(Date.now() + meta.time * 1000);