2024-01-25 14:49:45 +01:00
|
|
|
import { unixTimesInMs } from "@/src/constants/timeConstants";
|
|
|
|
import { getInventory } from "@/src/services/inventoryService";
|
2024-05-06 15:19:42 +02:00
|
|
|
import { getItemByBlueprint } from "@/src/services/itemDataService";
|
2024-01-25 14:49:45 +01:00
|
|
|
import { logger } from "@/src/utils/logger";
|
|
|
|
import { Types } from "mongoose";
|
|
|
|
|
|
|
|
export interface IResource {
|
|
|
|
uniqueName: string;
|
|
|
|
count: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
// export const updateResources = async (accountId: string, components: IResource[]) => {
|
|
|
|
// const inventory = await getInventory(accountId);
|
|
|
|
|
|
|
|
// for (const component of components) {
|
|
|
|
// const category = getItemCategoryByUniqueName(component.uniqueName) as keyof typeof inventory;
|
|
|
|
// //validate category
|
|
|
|
|
|
|
|
// console.log(component.uniqueName);
|
|
|
|
// console.log("cate", category);
|
|
|
|
|
|
|
|
// const invItem = inventory[category];
|
|
|
|
// console.log("invItem", invItem);
|
|
|
|
|
|
|
|
// inventory["MiscItems"];
|
|
|
|
// }
|
|
|
|
// };
|
|
|
|
|
|
|
|
export const startRecipe = async (recipeName: string, accountId: string) => {
|
|
|
|
const recipe = getItemByBlueprint(recipeName);
|
|
|
|
|
|
|
|
if (!recipe) {
|
|
|
|
logger.error(`unknown recipe ${recipeName}`);
|
|
|
|
throw new Error(`unknown recipe ${recipeName}`);
|
|
|
|
}
|
|
|
|
|
2024-06-17 16:41:02 +02:00
|
|
|
const componentsNeeded = recipe.ingredients.map(component => ({
|
|
|
|
uniqueName: component.ItemType,
|
|
|
|
count: component.ItemCount
|
2024-01-25 14:49:45 +01:00
|
|
|
}));
|
|
|
|
|
|
|
|
if (!componentsNeeded) {
|
|
|
|
logger.error(`recipe ${recipeName} has no components`);
|
|
|
|
throw new Error(`recipe ${recipeName} has no components`);
|
|
|
|
}
|
|
|
|
|
|
|
|
//TODO: consume components used
|
|
|
|
//await updateResources(accountId, componentsNeeded);
|
|
|
|
|
|
|
|
if (!recipe.buildTime) {
|
|
|
|
logger.error(`recipe ${recipeName} has no build time`);
|
|
|
|
throw new Error(`recipe ${recipeName} has no build time`);
|
|
|
|
}
|
|
|
|
//buildtime is in seconds
|
|
|
|
const completionDate = new Date(Date.now() + recipe.buildTime * unixTimesInMs.second);
|
|
|
|
|
|
|
|
const inventory = await getInventory(accountId);
|
|
|
|
inventory.PendingRecipes.push({
|
|
|
|
ItemType: recipeName,
|
|
|
|
CompletionDate: completionDate,
|
|
|
|
_id: new Types.ObjectId()
|
|
|
|
});
|
|
|
|
|
|
|
|
const newInventory = await inventory.save();
|
|
|
|
|
|
|
|
return {
|
|
|
|
RecipeId: { $oid: newInventory.PendingRecipes[newInventory.PendingRecipes.length - 1]._id?.toString() }
|
|
|
|
};
|
|
|
|
};
|