feat: support multiple warframes/weapons being given in the same request
This commit is contained in:
		
							parent
							
								
									8ebd7068e2
								
							
						
					
					
						commit
						d747063213
					
				@ -1,33 +0,0 @@
 | 
				
			|||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
					 | 
				
			||||||
import { ItemType, toAddItemRequest } from "@/src/helpers/customHelpers/addItemHelpers";
 | 
					 | 
				
			||||||
import { getWeaponType } from "@/src/services/itemDataService";
 | 
					 | 
				
			||||||
import { addPowerSuit, addEquipment, getInventory } from "@/src/services/inventoryService";
 | 
					 | 
				
			||||||
import { RequestHandler } from "express";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const addItemController: RequestHandler = async (req, res) => {
 | 
					 | 
				
			||||||
    const accountId = await getAccountIdForRequest(req);
 | 
					 | 
				
			||||||
    const request = toAddItemRequest(req.body);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    switch (request.type) {
 | 
					 | 
				
			||||||
        case ItemType.Powersuit: {
 | 
					 | 
				
			||||||
            const inventory = await getInventory(accountId);
 | 
					 | 
				
			||||||
            const inventoryChanges = addPowerSuit(inventory, request.InternalName);
 | 
					 | 
				
			||||||
            await inventory.save();
 | 
					 | 
				
			||||||
            res.json(inventoryChanges);
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        case ItemType.Weapon: {
 | 
					 | 
				
			||||||
            const inventory = await getInventory(accountId);
 | 
					 | 
				
			||||||
            const weaponType = getWeaponType(request.InternalName);
 | 
					 | 
				
			||||||
            const inventoryChanges = addEquipment(inventory, weaponType, request.InternalName);
 | 
					 | 
				
			||||||
            await inventory.save();
 | 
					 | 
				
			||||||
            res.json(inventoryChanges);
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
            res.status(400).json({ error: "something went wrong" });
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { addItemController };
 | 
					 | 
				
			||||||
							
								
								
									
										33
									
								
								src/controllers/custom/addItemsController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/controllers/custom/addItemsController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { getWeaponType } from "@/src/services/itemDataService";
 | 
				
			||||||
 | 
					import { addPowerSuit, addEquipment, getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const addItemsController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const requests = req.body as IAddItemRequest[];
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    for (const request of requests) {
 | 
				
			||||||
 | 
					        switch (request.type) {
 | 
				
			||||||
 | 
					            case ItemType.Powersuit:
 | 
				
			||||||
 | 
					                addPowerSuit(inventory, request.internalName);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            case ItemType.Weapon:
 | 
				
			||||||
 | 
					                addEquipment(inventory, getWeaponType(request.internalName), request.internalName);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum ItemType {
 | 
				
			||||||
 | 
					    Powersuit = "Powersuit",
 | 
				
			||||||
 | 
					    Weapon = "Weapon"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IAddItemRequest {
 | 
				
			||||||
 | 
					    type: ItemType;
 | 
				
			||||||
 | 
					    internalName: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,46 +0,0 @@
 | 
				
			|||||||
import { isString } from "@/src/helpers/general";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export enum ItemType {
 | 
					 | 
				
			||||||
    Powersuit = "Powersuit",
 | 
					 | 
				
			||||||
    Weapon = "Weapon"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const isItemType = (itemType: string): itemType is ItemType => {
 | 
					 | 
				
			||||||
    return Object.keys(ItemType).includes(itemType);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const parseItemType = (itemType: unknown): ItemType => {
 | 
					 | 
				
			||||||
    if (!itemType || !isString(itemType) || !isItemType(itemType)) {
 | 
					 | 
				
			||||||
        throw new Error("incorrect item type");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return itemType;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface IAddItemRequest {
 | 
					 | 
				
			||||||
    type: ItemType;
 | 
					 | 
				
			||||||
    InternalName: string;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const parseInternalItemName = (internalName: unknown): string => {
 | 
					 | 
				
			||||||
    if (!isString(internalName)) {
 | 
					 | 
				
			||||||
        throw new Error("incorrect internal name");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return internalName;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const toAddItemRequest = (body: unknown): IAddItemRequest => {
 | 
					 | 
				
			||||||
    if (!body || typeof body !== "object") {
 | 
					 | 
				
			||||||
        throw new Error("incorrect or missing add item request data");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ("type" in body && "internalName" in body) {
 | 
					 | 
				
			||||||
        return {
 | 
					 | 
				
			||||||
            type: parseItemType(body.type),
 | 
					 | 
				
			||||||
            InternalName: parseInternalItemName(body.internalName)
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    throw new Error("malformed add item request");
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@ -8,7 +8,7 @@ import { deleteAccountController } from "@/src/controllers/custom/deleteAccountC
 | 
				
			|||||||
import { renameAccountController } from "@/src/controllers/custom/renameAccountController";
 | 
					import { renameAccountController } from "@/src/controllers/custom/renameAccountController";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { createAccountController } from "@/src/controllers/custom/createAccountController";
 | 
					import { createAccountController } from "@/src/controllers/custom/createAccountController";
 | 
				
			||||||
import { addItemController } from "@/src/controllers/custom/addItemController";
 | 
					import { addItemsController } from "@/src/controllers/custom/addItemsController";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController";
 | 
					import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController";
 | 
				
			||||||
import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController";
 | 
					import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController";
 | 
				
			||||||
@ -23,7 +23,7 @@ customRouter.get("/deleteAccount", deleteAccountController);
 | 
				
			|||||||
customRouter.get("/renameAccount", renameAccountController);
 | 
					customRouter.get("/renameAccount", renameAccountController);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
customRouter.post("/createAccount", createAccountController);
 | 
					customRouter.post("/createAccount", createAccountController);
 | 
				
			||||||
customRouter.post("/addItem", addItemController);
 | 
					customRouter.post("/addItems", addItemsController);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
customRouter.get("/config", getConfigDataController);
 | 
					customRouter.get("/config", getConfigDataController);
 | 
				
			||||||
customRouter.post("/config", updateConfigDataController);
 | 
					customRouter.post("/config", updateConfigDataController);
 | 
				
			||||||
 | 
				
			|||||||
@ -524,12 +524,14 @@ function doAcquireWarframe() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    revalidateAuthz(() => {
 | 
					    revalidateAuthz(() => {
 | 
				
			||||||
        const req = $.post({
 | 
					        const req = $.post({
 | 
				
			||||||
            url: "/custom/addItem?" + window.authz,
 | 
					            url: "/custom/addItems?" + window.authz,
 | 
				
			||||||
            contentType: "application/json",
 | 
					            contentType: "application/json",
 | 
				
			||||||
            data: JSON.stringify({
 | 
					            data: JSON.stringify([
 | 
				
			||||||
                type: "Powersuit",
 | 
					                {
 | 
				
			||||||
                internalName: uniqueName
 | 
					                    type: "Powersuit",
 | 
				
			||||||
            })
 | 
					                    internalName: uniqueName
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ])
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        req.done(() => {
 | 
					        req.done(() => {
 | 
				
			||||||
            document.getElementById("warframe-to-acquire").value = "";
 | 
					            document.getElementById("warframe-to-acquire").value = "";
 | 
				
			||||||
@ -550,12 +552,14 @@ function doAcquireWeapon() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    revalidateAuthz(() => {
 | 
					    revalidateAuthz(() => {
 | 
				
			||||||
        const req = $.post({
 | 
					        const req = $.post({
 | 
				
			||||||
            url: "/custom/addItem?" + window.authz,
 | 
					            url: "/custom/addItems?" + window.authz,
 | 
				
			||||||
            contentType: "application/json",
 | 
					            contentType: "application/json",
 | 
				
			||||||
            data: JSON.stringify({
 | 
					            data: JSON.stringify([
 | 
				
			||||||
                type: "Weapon",
 | 
					                {
 | 
				
			||||||
                internalName: uniqueName
 | 
					                    type: "Weapon",
 | 
				
			||||||
            })
 | 
					                    internalName: uniqueName
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ])
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        req.done(() => {
 | 
					        req.done(() => {
 | 
				
			||||||
            document.getElementById("weapon-to-acquire").value = "";
 | 
					            document.getElementById("weapon-to-acquire").value = "";
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user