add purchase

This commit is contained in:
Master 2023-06-05 03:13:46 +08:00
parent e08df26ab3
commit d03cc9eec2
9 changed files with 207 additions and 7 deletions

View File

@ -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
View File

@ -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",

View File

@ -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",

View File

@ -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);
}; };

View File

@ -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 };

View File

@ -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 };

View 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 };

View File

@ -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;
}

View 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"
]