2024-01-25 14:49:45 +01:00
|
|
|
//this is a controller for the claimCompletedRecipe route
|
|
|
|
//it will claim a recipe for the user
|
|
|
|
|
2024-05-06 15:19:42 +02:00
|
|
|
import { RequestHandler } from "express";
|
2024-01-25 14:49:45 +01:00
|
|
|
import { logger } from "@/src/utils/logger";
|
|
|
|
import { getItemByBlueprint, getItemCategoryByUniqueName } from "@/src/services/itemDataService";
|
|
|
|
import { IOid } from "@/src/types/commonTypes";
|
|
|
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
|
|
|
import { getInventory } from "@/src/services/inventoryService";
|
|
|
|
import { IInventoryDatabase } from "@/src/types/inventoryTypes/inventoryTypes";
|
|
|
|
|
|
|
|
export interface IClaimCompletedRecipeRequest {
|
|
|
|
RecipeIds: IOid[];
|
|
|
|
}
|
|
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
|
|
export const claimCompletedRecipeController: RequestHandler = async (req, res) => {
|
|
|
|
const claimCompletedRecipeRequest = getJSONfromString(req.body.toString()) as IClaimCompletedRecipeRequest;
|
|
|
|
const accountId = req.query.accountId as string;
|
|
|
|
if (!accountId) throw new Error("no account id");
|
|
|
|
|
|
|
|
console.log(claimCompletedRecipeRequest);
|
|
|
|
const inventory = await getInventory(accountId);
|
|
|
|
const pendingRecipe = inventory.PendingRecipes.find(
|
|
|
|
recipe => recipe._id?.toString() === claimCompletedRecipeRequest.RecipeIds[0].$oid
|
|
|
|
);
|
|
|
|
console.log(pendingRecipe);
|
|
|
|
if (!pendingRecipe) {
|
|
|
|
logger.error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`);
|
|
|
|
throw new Error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
//check recipe is indeed ready to be completed
|
|
|
|
// if (pendingRecipe.CompletionDate > new Date()) {
|
|
|
|
// logger.error(`recipe ${pendingRecipe._id} is not ready to be completed`);
|
|
|
|
// throw new Error(`recipe ${pendingRecipe._id} is not ready to be completed`);
|
|
|
|
// }
|
|
|
|
|
|
|
|
//get completed Items
|
|
|
|
const completedItemName = getItemByBlueprint(pendingRecipe.ItemType)?.uniqueName;
|
|
|
|
|
|
|
|
if (!completedItemName) {
|
|
|
|
logger.error(`no completed item found for recipe ${pendingRecipe._id}`);
|
|
|
|
throw new Error(`no completed item found for recipe ${pendingRecipe._id}`);
|
|
|
|
}
|
|
|
|
const itemCategory = getItemCategoryByUniqueName(completedItemName) as keyof typeof inventory;
|
|
|
|
console.log(itemCategory);
|
|
|
|
//TODO: remove all Schema.Mixed for inventory[itemCategory] not to be any
|
|
|
|
//add item
|
|
|
|
//inventory[itemCategory].
|
|
|
|
|
|
|
|
//add additional item components like mods or weapons for a sentinel.
|
|
|
|
//const additionalItemComponents = itemComponents[uniqueName]
|
|
|
|
//add these items to inventory
|
|
|
|
//return changes as InventoryChanges
|
|
|
|
|
|
|
|
//remove pending recipe
|
|
|
|
inventory.PendingRecipes.pull(pendingRecipe._id);
|
|
|
|
// await inventory.save();
|
|
|
|
|
|
|
|
logger.debug("Claiming Completed Recipe", { completedItemName });
|
|
|
|
|
|
|
|
res.json({ InventoryChanges: {} });
|
|
|
|
};
|