From 1dd9f4ca4f08eb1ee0dbcc312ccf8fc9fa072907 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 6 May 2024 15:06:30 +0200 Subject: [PATCH] feat: selling of warframes & weapons (#157) --- src/controllers/api/sellController.ts | 49 +++++++++++++++++++++++++++ src/routes/api.ts | 2 ++ src/types/sellTypes.ts | 23 +++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 src/controllers/api/sellController.ts create mode 100644 src/types/sellTypes.ts diff --git a/src/controllers/api/sellController.ts b/src/controllers/api/sellController.ts new file mode 100644 index 00000000..c80dfb7a --- /dev/null +++ b/src/controllers/api/sellController.ts @@ -0,0 +1,49 @@ +import { RequestHandler } from "express"; +import { ISellRequest } from "@/src/types/sellTypes"; +import { getInventory } from "@/src/services/inventoryService"; + +export const sellController: RequestHandler = async (req, res) => { + const payload: ISellRequest = JSON.parse(req.body.toString()); + const inventory = await getInventory(req.query.accountId as string); + + // Give currency + if (payload.SellCurrency == "SC_RegularCredits") { + inventory.RegularCredits += payload.SellPrice; + } else if (payload.SellCurrency == "SC_FusionPoints") { + inventory.FusionPoints += payload.SellPrice; + } else { + throw new Error("Unknown SellCurrency: " + payload.SellCurrency); + } + + // Remove item(s) + if (payload.Items.Suits) { + payload.Items.Suits.forEach(sellItem => { + inventory.Suits.pull({ _id: sellItem.String }); + }); + } + if (payload.Items.LongGuns) { + payload.Items.LongGuns.forEach(sellItem => { + inventory.LongGuns.pull({ _id: sellItem.String }); + }); + } + if (payload.Items.Pistols) { + payload.Items.Pistols.forEach(sellItem => { + inventory.Pistols.pull({ _id: sellItem.String }); + }); + } + if (payload.Items.Melee) { + payload.Items.Melee.forEach(sellItem => { + inventory.Melee.pull({ _id: sellItem.String }); + }); + } + if (payload.Items.Recipes) { + // TODO + // Note: sellItem.String is a uniqueName in this case + } + if (payload.Items.Upgrades) { + // TODO + } + + await inventory.save(); + res.json({}); +}; diff --git a/src/routes/api.ts b/src/routes/api.ts index 3f68a958..df15ab9b 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -44,6 +44,7 @@ import { updateThemeController } from "../controllers/api/updateThemeController" import { getGuildController } from "@/src/controllers/api/getGuildController"; import { addFriendImageController } from "@/src/controllers/api/addFriendImageController"; import { createGuildController } from "@/src/controllers/api/createGuildController"; +import { sellController } from "@/src/controllers/api/sellController"; const apiRouter = express.Router(); @@ -98,5 +99,6 @@ apiRouter.post("/trainingResult.php", trainingResultController); apiRouter.post("/updateTheme.php", updateThemeController); apiRouter.post("/addFriendImage.php", addFriendImageController); apiRouter.post("/createGuild.php", createGuildController); +apiRouter.post("/sell.php", sellController); export { apiRouter }; diff --git a/src/types/sellTypes.ts b/src/types/sellTypes.ts new file mode 100644 index 00000000..624b7186 --- /dev/null +++ b/src/types/sellTypes.ts @@ -0,0 +1,23 @@ +export interface ISellRequest { + Items: { + Suits?: ISellItem[]; + LongGuns?: ISellItem[]; + Pistols?: ISellItem[]; + Melee?: ISellItem[]; + Recipes?: ISellItem[]; + Upgrades?: ISellItem[]; + }; + SellPrice: number; + SellCurrency: + | "SC_RegularCredits" + | "SC_PrimeBucks" + | "SC_FusionPoints" + | "SC_CrewShipFusionPoints" + | "SC_Resources"; + buildLabel: string; +} + +export interface ISellItem { + String: string; // oid or uniqueName + Count: number; +}