purchase item save test

This commit is contained in:
Master 2023-06-05 05:30:55 +08:00
parent 90d0b1ad7d
commit a36bc69341
3 changed files with 132 additions and 13 deletions

View File

@ -1,17 +1,47 @@
/* eslint-disable @typescript-eslint/no-unsafe-argument */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import { PurchaseItem } from "@/src/services/tradeService";
import { Request, Response } from "express";
import Items from "warframe-items";
const purchaseController = (_req: Request, res: Response): void => {
const body = JSON.parse(_req.body);
const response = PurchaseItem(
body.PurchaseParams.StoreItem,
body.PurchaseParams.Quantity,
body.PurchaseParams.UsePremium,
body.PurchaseParams.ExpectedPrice
);
import { parseString } from "@/src/helpers/general";
import { PurchaseItem } from "@/src/services/tradeService";
import purchase from "@/static/fixed_responses/purchase.json";
const purchaseController = async (req: Request, res: Response): Promise<void> => {
const accountId = req.query.accountId;
if (!accountId) {
res.status(400).json({ error: "accountId was not provided" });
return;
}
console.log(accountId);
const body = JSON.parse(req.body);
const purchaseParams = body.PurchaseParams;
const storeItem = purchaseParams.StoreItem;
const quantity = purchaseParams.Quantity;
const usePremium = purchaseParams.UsePremium;
const price = purchaseParams.ExpectedPrice;
const items = new Items({ category: ["All"] });
const item = items.find(i => {
return i.uniqueName == storeItem;
});
if (item) {
const response = await PurchaseItem(parseString(accountId), item, quantity, usePremium, price);
res.json({ InventoryChanges: response });
return;
} else {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
const item_name = storeItem.replace("StoreItems/", "");
const new_item = items.find(i => {
return i.uniqueName == item_name;
});
if (new_item) {
const response = await PurchaseItem(parseString(accountId), new_item, quantity, usePremium, price);
res.json({ InventoryChanges: response });
return;
}
}
res.json(purchase);
};
export { purchaseController };

View File

@ -2,6 +2,8 @@ import { Inventory } from "@/src/models/inventoryModel";
import new_inventory from "@/static/fixed_responses/postTutorialInventory.json";
import config from "@/config.json";
import { Types } from "mongoose";
import { InventoryChanges } from "../types/commonTypes";
import { parseString } from "../helpers/general";
const createInventory = async (accountOwnerId: Types.ObjectId) => {
try {
@ -22,4 +24,81 @@ const createInventory = async (accountOwnerId: Types.ObjectId) => {
}
};
export { createInventory };
const UpdateInventory = async (accountId: string, inventoryChanges: InventoryChanges) => {
try {
const inventory = await Inventory.findOne({ accountOwnerId: accountId });
if (inventory) {
if (inventoryChanges.Suits) {
inventoryChanges.Suits.forEach(item => {
if (item.ItemId && item.ItemType) {
inventory.Suits.push({
ItemType: item.ItemType,
Configs: [],
ItemId: item.ItemId
});
}
});
}
if (inventoryChanges.LongGuns) {
inventoryChanges.LongGuns.forEach(item => {
if (item.ItemId && item.ItemType) {
inventory.LongGuns.push({
ItemType: item.ItemType,
Configs: [],
ItemId: item.ItemId
});
}
});
}
if (inventoryChanges.Pistols) {
inventoryChanges.Pistols.forEach(item => {
if (item.ItemId && item.ItemType) {
inventory.Pistols.push({
ItemType: item.ItemType,
Configs: [],
ItemId: item.ItemId
});
}
});
}
if (inventoryChanges.Melee) {
inventoryChanges.Melee.forEach(item => {
if (item.ItemId && item.ItemType) {
inventory.Melee.push({
ItemType: item.ItemType,
Configs: [],
ItemId: item.ItemId
});
}
});
}
if (inventoryChanges.FlavourItems) {
inventoryChanges.FlavourItems.forEach(item => {
if (item.ItemType) {
inventory.FlavourItems.push({
ItemType: item.ItemType
});
}
});
}
if (inventoryChanges.MiscItems) {
inventoryChanges.MiscItems.forEach(item => {
if (item.ItemType && item.ItemCount) {
inventory.MiscItems.push({
ItemType: item.ItemType,
ItemCount: item.ItemCount
});
}
});
}
await inventory.updateOne(inventory);
}
} catch (error) {
if (error instanceof Error) {
throw new Error(`error update inventory" ${error.message}`);
}
throw new Error("error update inventory that is not of instance Error");
}
};
export { createInventory, UpdateInventory };

View File

@ -1,10 +1,18 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import { Item, Misc, Skin, Warframe, Weapon } from "warframe-items";
import { InventoryChanges, StoreItem } from "../types/commonTypes";
import { generateOid, parseString } from "../helpers/general";
import { UpdateInventory } from "./inventoryService";
const PurchaseItem = (item: Item, quantity: number, usePremium: boolean, price: number): InventoryChanges => {
const PurchaseItem = async (
accountId: string,
item: Item,
quantity: number,
usePremium: boolean,
price: number
): Promise<InventoryChanges> => {
// {"InventoryChanges":{"WishlistChanges":["/Lotus/Types/StoreItems/SuitCustomizations/ColourPickerItem"],"FlavourItems":[{"ItemType":"/Lotus/Types/StoreItems/SuitCustomizations/ColourPickerItem"}],"PremiumCredits":-75}}
const newInventoryChanges: InventoryChanges = {};
if ((item as Warframe).productCategory == "Suits") {
const newSuits: StoreItem[] = [
@ -66,6 +74,8 @@ const PurchaseItem = (item: Item, quantity: number, usePremium: boolean, price:
if (!usePremium) {
newInventoryChanges.RegularCredits = -price;
}
await UpdateInventory(accountId, newInventoryChanges);
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return newInventoryChanges;
};