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 { 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 { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController";
|
||||
@ -23,7 +23,7 @@ customRouter.get("/deleteAccount", deleteAccountController);
|
||||
customRouter.get("/renameAccount", renameAccountController);
|
||||
|
||||
customRouter.post("/createAccount", createAccountController);
|
||||
customRouter.post("/addItem", addItemController);
|
||||
customRouter.post("/addItems", addItemsController);
|
||||
|
||||
customRouter.get("/config", getConfigDataController);
|
||||
customRouter.post("/config", updateConfigDataController);
|
||||
|
@ -524,12 +524,14 @@ function doAcquireWarframe() {
|
||||
}
|
||||
revalidateAuthz(() => {
|
||||
const req = $.post({
|
||||
url: "/custom/addItem?" + window.authz,
|
||||
url: "/custom/addItems?" + window.authz,
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({
|
||||
data: JSON.stringify([
|
||||
{
|
||||
type: "Powersuit",
|
||||
internalName: uniqueName
|
||||
})
|
||||
}
|
||||
])
|
||||
});
|
||||
req.done(() => {
|
||||
document.getElementById("warframe-to-acquire").value = "";
|
||||
@ -550,12 +552,14 @@ function doAcquireWeapon() {
|
||||
}
|
||||
revalidateAuthz(() => {
|
||||
const req = $.post({
|
||||
url: "/custom/addItem?" + window.authz,
|
||||
url: "/custom/addItems?" + window.authz,
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({
|
||||
data: JSON.stringify([
|
||||
{
|
||||
type: "Weapon",
|
||||
internalName: uniqueName
|
||||
})
|
||||
}
|
||||
])
|
||||
});
|
||||
req.done(() => {
|
||||
document.getElementById("weapon-to-acquire").value = "";
|
||||
|
Loading…
x
Reference in New Issue
Block a user