add purchase
This commit is contained in:
parent
e08df26ab3
commit
d03cc9eec2
@ -7,5 +7,6 @@
|
|||||||
"skipStoryModeChoice": true,
|
"skipStoryModeChoice": true,
|
||||||
"skipTutorial": true,
|
"skipTutorial": true,
|
||||||
"testMission": true,
|
"testMission": true,
|
||||||
"testQuestKey": true
|
"testQuestKey": true,
|
||||||
|
"testShipFeature": true
|
||||||
}
|
}
|
||||||
|
8
package-lock.json
generated
8
package-lock.json
generated
@ -11,7 +11,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dotenv": "^16.1.3",
|
"dotenv": "^16.1.3",
|
||||||
"express": "^5.0.0-beta.1",
|
"express": "^5.0.0-beta.1",
|
||||||
"mongoose": "^7.1.1"
|
"mongoose": "^7.1.1",
|
||||||
|
"warframe-items": "^1.1260.50"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tsconfig/node20": "^1.0.0",
|
"@tsconfig/node20": "^1.0.0",
|
||||||
@ -3140,6 +3141,11 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/warframe-items": {
|
||||||
|
"version": "1.1260.50",
|
||||||
|
"resolved": "https://registry.npmjs.org/warframe-items/-/warframe-items-1.1260.50.tgz",
|
||||||
|
"integrity": "sha512-03oNB6Yg61yUd7glewUUg0avnaGaAqc9oVPJk+1THFB0o/d4ppQSgL38yTUxMwmw0avCrqd+8z5TMrfXtvPDXQ=="
|
||||||
|
},
|
||||||
"node_modules/webidl-conversions": {
|
"node_modules/webidl-conversions": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dotenv": "^16.1.3",
|
"dotenv": "^16.1.3",
|
||||||
"express": "^5.0.0-beta.1",
|
"express": "^5.0.0-beta.1",
|
||||||
"mongoose": "^7.1.1"
|
"mongoose": "^7.1.1",
|
||||||
|
"warframe-items": "^1.1260.50"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tsconfig/node20": "^1.0.0",
|
"@tsconfig/node20": "^1.0.0",
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
|
import { RequestHandler } from "express";
|
||||||
|
|
||||||
import { Account } from "@/src/models/loginModel";
|
import { Account } from "@/src/models/loginModel";
|
||||||
import { Ship } from "@/src/models/shipModel";
|
import { Ship } from "@/src/models/shipModel";
|
||||||
|
|
||||||
import { createShip } from "@/src/services/shipService";
|
import { createShip } from "@/src/services/shipService";
|
||||||
import { RequestHandler } from "express";
|
|
||||||
|
import config from "@/config.json";
|
||||||
|
import testShipFeature from "@/static/fixed_responses/testShipFeature.json";
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||||
const getShipController: RequestHandler = async (_req, res) => {
|
const getShipController: RequestHandler = async (_req, res) => {
|
||||||
@ -16,6 +21,13 @@ const getShipController: RequestHandler = async (_req, res) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ship) {
|
||||||
|
const new_ship = ship;
|
||||||
|
if (config.testMission) new_ship.Ship.Features = testShipFeature;
|
||||||
|
res.json(new_ship);
|
||||||
|
return;
|
||||||
|
}
|
||||||
res.json(ship);
|
res.json(ship);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,8 +1,17 @@
|
|||||||
import purchase from "@/static/fixed_responses/purchase.json";
|
/* 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 { Request, Response } from "express";
|
||||||
|
|
||||||
const purchaseController = (_req: Request, res: Response): void => {
|
const purchaseController = (_req: Request, res: Response): void => {
|
||||||
res.json(purchase);
|
const body = JSON.parse(_req.body);
|
||||||
|
const response = PurchaseItem(
|
||||||
|
body.PurchaseParams.StoreItem,
|
||||||
|
body.PurchaseParams.Quantity,
|
||||||
|
body.PurchaseParams.UsePremium,
|
||||||
|
body.PurchaseParams.ExpectedPrice
|
||||||
|
);
|
||||||
|
res.json({ InventoryChanges: response });
|
||||||
};
|
};
|
||||||
|
|
||||||
export { purchaseController };
|
export { purchaseController };
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
import mongoose from "mongoose";
|
||||||
|
import { Oid } from "../types/commonTypes";
|
||||||
|
|
||||||
const isString = (text: unknown): text is string => {
|
const isString = (text: unknown): text is string => {
|
||||||
return typeof text === "string" || text instanceof String;
|
return typeof text === "string" || text instanceof String;
|
||||||
};
|
};
|
||||||
@ -55,4 +58,15 @@ const parseBoolean = (booleanCandidate: unknown): boolean => {
|
|||||||
return booleanCandidate;
|
return booleanCandidate;
|
||||||
};
|
};
|
||||||
|
|
||||||
export { isString, isNumber, parseString, parseNumber, parseDateNumber, parseBoolean, parseEmail };
|
const generateOid = (str?: string): Oid => {
|
||||||
|
const objectId: Oid = {
|
||||||
|
$oid: new mongoose.Types.ObjectId().toString()
|
||||||
|
};
|
||||||
|
if (str) {
|
||||||
|
objectId.$oid = str;
|
||||||
|
}
|
||||||
|
//console.log(objectId);
|
||||||
|
return objectId;
|
||||||
|
};
|
||||||
|
|
||||||
|
export { isString, isNumber, parseString, parseNumber, parseDateNumber, parseBoolean, parseEmail, generateOid };
|
||||||
|
77
src/services/tradeService.ts
Normal file
77
src/services/tradeService.ts
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import { Item, Misc, Skin, Warframe, Weapon } from "warframe-items";
|
||||||
|
import { InventoryChanges, StoreItem } from "../types/commonTypes";
|
||||||
|
import { generateOid, parseString } from "../helpers/general";
|
||||||
|
|
||||||
|
const PurchaseItem = (item: Item, quantity: number, usePremium: boolean, price: number): 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[] = [
|
||||||
|
{
|
||||||
|
ItemType: item.uniqueName,
|
||||||
|
Cofigs: [],
|
||||||
|
ItemId: generateOid()
|
||||||
|
}
|
||||||
|
];
|
||||||
|
newInventoryChanges.Suits = newSuits;
|
||||||
|
}
|
||||||
|
if ((item as Weapon).productCategory == "LongGuns") {
|
||||||
|
const newLongGuns: StoreItem[] = [
|
||||||
|
{
|
||||||
|
ItemType: item.uniqueName,
|
||||||
|
Cofigs: [],
|
||||||
|
ItemId: generateOid()
|
||||||
|
}
|
||||||
|
];
|
||||||
|
newInventoryChanges.LongGuns = newLongGuns;
|
||||||
|
}
|
||||||
|
if ((item as Weapon).productCategory == "Pistols") {
|
||||||
|
const newPistols: StoreItem[] = [
|
||||||
|
{
|
||||||
|
ItemType: item.uniqueName,
|
||||||
|
Cofigs: [],
|
||||||
|
ItemId: generateOid()
|
||||||
|
}
|
||||||
|
];
|
||||||
|
newInventoryChanges.Pistols = newPistols;
|
||||||
|
}
|
||||||
|
if ((item as Weapon).productCategory == "Melee") {
|
||||||
|
const newMelee: StoreItem[] = [
|
||||||
|
{
|
||||||
|
ItemType: item.uniqueName,
|
||||||
|
Cofigs: [],
|
||||||
|
ItemId: generateOid()
|
||||||
|
}
|
||||||
|
];
|
||||||
|
newInventoryChanges.Melee = newMelee;
|
||||||
|
}
|
||||||
|
if (item as Misc) {
|
||||||
|
const newMisc: StoreItem[] = [
|
||||||
|
{
|
||||||
|
ItemType: item.uniqueName,
|
||||||
|
ItemCount: quantity
|
||||||
|
}
|
||||||
|
];
|
||||||
|
newInventoryChanges.MiscItems = newMisc;
|
||||||
|
}
|
||||||
|
if (item as Skin) {
|
||||||
|
newInventoryChanges.WishlistChanges = [];
|
||||||
|
newInventoryChanges.WishlistChanges.push(parseString(item.uniqueName));
|
||||||
|
const newFlavourItem: StoreItem[] = [
|
||||||
|
{
|
||||||
|
ItemType: item.uniqueName
|
||||||
|
}
|
||||||
|
];
|
||||||
|
newInventoryChanges.FlavourItems = newFlavourItem;
|
||||||
|
}
|
||||||
|
if (usePremium) {
|
||||||
|
newInventoryChanges.PremiumCredits = -price;
|
||||||
|
}
|
||||||
|
if (!usePremium) {
|
||||||
|
newInventoryChanges.RegularCredits = -price;
|
||||||
|
}
|
||||||
|
return newInventoryChanges;
|
||||||
|
};
|
||||||
|
|
||||||
|
export { PurchaseItem };
|
@ -1,3 +1,25 @@
|
|||||||
|
import { CrewShipSalvageBinClass, SuitConfig } from "./inventoryTypes";
|
||||||
|
|
||||||
export interface Oid {
|
export interface Oid {
|
||||||
$oid: string;
|
$oid: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface StoreItem {
|
||||||
|
ItemType?: string;
|
||||||
|
ItemId?: Oid;
|
||||||
|
ItemCount?: number;
|
||||||
|
Cofigs?: SuitConfig[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface InventoryChanges {
|
||||||
|
WeaponBin?: CrewShipSalvageBinClass;
|
||||||
|
WishlistChanges?: string[];
|
||||||
|
FlavourItems?: StoreItem[];
|
||||||
|
Suits?: StoreItem[];
|
||||||
|
LongGuns?: StoreItem[];
|
||||||
|
Pistols?: StoreItem[];
|
||||||
|
Melee?: StoreItem[];
|
||||||
|
MiscItems?: StoreItem[];
|
||||||
|
PremiumCredits?: number;
|
||||||
|
RegularCredits?: number;
|
||||||
|
}
|
||||||
|
58
static/fixed_responses/testShipFeature.json
Normal file
58
static/fixed_responses/testShipFeature.json
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
[
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/EarthNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/ArsenalFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/SocialMenuFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/AdvancedOrdisFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/AlchemyRoomFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/AlertsFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/ArsenalFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/CeresNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/ClanFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/EarthNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/EidolonArchwingFoundryUpgradeFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/ErisNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/EuropaNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/FoundryConcurrentBuildFormaFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/FoundryFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/FoundryVesselUpgradeFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/GeneticFoundryCatbrowUpgradeFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/GeneticFoundryFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/GeneticFoundryUpgradeFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/InfestedFoundryArchonShardFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/InfestedFoundryItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/InfestedFoundryUpgradeFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/JupiterNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/MarketTierOneFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/MarketTierTwoFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/MarsNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/MercuryNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/ModsFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/ModsFusionFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/ModsTransmuteFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/NeptuneNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/PersonalQuartersFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/PhobosNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/PlutoNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/DamagedRailjackHoodBraceFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/DamagedRailjackHoodFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/DamagedRailjackHullFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/DamagedRailjackNacelleLeftFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/DamagedRailjackNacelleRightFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/DamagedRailjackTailFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/RailjackHoodBraceFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/RailjackHoodFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/RailjackHullFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/RailjackNacelleLeftFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/RailjackNacelleRightFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/Railjack/RailjackTailFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/RailjackCephalonShipFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/RailjackKeyShipFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/SaturnNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/SednaNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/ShipFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/SocialMenuFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/SolarChartFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/UranusNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/VenusNavigationFeatureItem",
|
||||||
|
"/Lotus/Types/Items/ShipFeatureItems/VoidProjectionFeatureItem"
|
||||||
|
]
|
Loading…
x
Reference in New Issue
Block a user