chore: simplify serversideVendorsService's api #1467

Merged
Sainan merged 1 commits from simplify-vendor-service into main 2025-04-05 06:52:14 -07:00
5 changed files with 20 additions and 21 deletions

View File

@ -1,5 +1,5 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { getVendorManifestByTypeName, preprocessVendorManifest } from "@/src/services/serversideVendorsService"; import { getVendorManifestByTypeName } from "@/src/services/serversideVendorsService";
export const getVendorInfoController: RequestHandler = (req, res) => { export const getVendorInfoController: RequestHandler = (req, res) => {
if (typeof req.query.vendor == "string") { if (typeof req.query.vendor == "string") {
@ -7,7 +7,7 @@ export const getVendorInfoController: RequestHandler = (req, res) => {
if (!manifest) { if (!manifest) {
throw new Error(`Unknown vendor: ${req.query.vendor}`); throw new Error(`Unknown vendor: ${req.query.vendor}`);
} }
res.json(preprocessVendorManifest(manifest)); res.json(manifest);
} else { } else {
res.status(400).end(); res.status(400).end();
} }

View File

@ -9,7 +9,7 @@ import {
} from "@/src/services/guildService"; } from "@/src/services/guildService";
import { getInventory } from "@/src/services/inventoryService"; import { getInventory } from "@/src/services/inventoryService";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { getVendorManifestByTypeName, preprocessVendorManifest } from "@/src/services/serversideVendorsService"; import { getVendorManifestByTypeName } from "@/src/services/serversideVendorsService";
import { GuildPermission } from "@/src/types/guildTypes"; import { GuildPermission } from "@/src/types/guildTypes";
import { IPurchaseParams } from "@/src/types/purchaseTypes"; import { IPurchaseParams } from "@/src/types/purchaseTypes";
import { RequestHandler } from "express"; import { RequestHandler } from "express";
@ -26,9 +26,9 @@ export const postGuildAdvertisementController: RequestHandler = async (req, res)
const payload = getJSONfromString<IPostGuildAdvertisementRequest>(String(req.body)); const payload = getJSONfromString<IPostGuildAdvertisementRequest>(String(req.body));
// Handle resource cost // Handle resource cost
const vendor = preprocessVendorManifest( const vendor = getVendorManifestByTypeName(
getVendorManifestByTypeName("/Lotus/Types/Game/VendorManifests/Hubs/GuildAdvertisementVendorManifest")! "/Lotus/Types/Game/VendorManifests/Hubs/GuildAdvertisementVendorManifest"
); )!;
const offer = vendor.VendorInfo.ItemManifest.find(x => x.StoreItem == payload.PurchaseParams.StoreItem)!; const offer = vendor.VendorInfo.ItemManifest.find(x => x.StoreItem == payload.PurchaseParams.StoreItem)!;
if (getVaultMiscItemCount(guild, offer.ItemPrices![0].ItemType) >= offer.ItemPrices![0].ItemCount) { if (getVaultMiscItemCount(guild, offer.ItemPrices![0].ItemType) >= offer.ItemPrices![0].ItemCount) {
addVaultMiscItems(guild, [ addVaultMiscItems(guild, [

View File

@ -9,7 +9,7 @@ import {
updateSlots updateSlots
} from "@/src/services/inventoryService"; } from "@/src/services/inventoryService";
import { getRandomWeightedRewardUc } from "@/src/services/rngService"; import { getRandomWeightedRewardUc } from "@/src/services/rngService";
import { getVendorManifestByOid, preprocessVendorManifest } from "@/src/services/serversideVendorsService"; import { getVendorManifestByOid } from "@/src/services/serversideVendorsService";
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
import { IPurchaseRequest, IPurchaseResponse, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes"; import { IPurchaseRequest, IPurchaseResponse, SlotPurchase, IInventoryChanges } from "@/src/types/purchaseTypes";
import { logger } from "@/src/utils/logger"; import { logger } from "@/src/utils/logger";
@ -53,9 +53,8 @@ export const handlePurchase = async (
const prePurchaseInventoryChanges: IInventoryChanges = {}; const prePurchaseInventoryChanges: IInventoryChanges = {};
let seed: bigint | undefined; let seed: bigint | undefined;
if (purchaseRequest.PurchaseParams.Source == 7) { if (purchaseRequest.PurchaseParams.Source == 7) {
const rawManifest = getVendorManifestByOid(purchaseRequest.PurchaseParams.SourceId!); const manifest = getVendorManifestByOid(purchaseRequest.PurchaseParams.SourceId!);
if (rawManifest) { if (manifest) {
const manifest = preprocessVendorManifest(rawManifest);
let ItemId: string | undefined; let ItemId: string | undefined;
if (purchaseRequest.PurchaseParams.ExtraPurchaseInfoJson) { if (purchaseRequest.PurchaseParams.ExtraPurchaseInfoJson) {
ItemId = (JSON.parse(purchaseRequest.PurchaseParams.ExtraPurchaseInfoJson) as { ItemId: string }) ItemId = (JSON.parse(purchaseRequest.PurchaseParams.ExtraPurchaseInfoJson) as { ItemId: string })

View File

@ -3,14 +3,14 @@ import path from "path";
import { repoDir } from "@/src/helpers/pathHelper"; import { repoDir } from "@/src/helpers/pathHelper";
import { CRng, mixSeeds } from "@/src/services/rngService"; import { CRng, mixSeeds } from "@/src/services/rngService";
import { IMongoDate } from "@/src/types/commonTypes"; import { IMongoDate } from "@/src/types/commonTypes";
import { IVendorManifest, IVendorManifestPreprocessed } from "@/src/types/vendorTypes"; import { IRawVendorManifest, IVendorManifestPreprocessed } from "@/src/types/vendorTypes";
import { JSONParse } from "json-with-bigint"; import { JSONParse } from "json-with-bigint";
const getVendorManifestJson = (name: string): IVendorManifest => { const getVendorManifestJson = (name: string): IRawVendorManifest => {
return JSONParse(fs.readFileSync(path.join(repoDir, `static/fixed_responses/getVendorInfo/${name}.json`), "utf-8")); return JSONParse(fs.readFileSync(path.join(repoDir, `static/fixed_responses/getVendorInfo/${name}.json`), "utf-8"));
}; };
const vendorManifests: IVendorManifest[] = [ const rawVendorManifests: IRawVendorManifest[] = [
getVendorManifestJson("ArchimedeanVendorManifest"), getVendorManifestJson("ArchimedeanVendorManifest"),
getVendorManifestJson("DeimosEntratiFragmentVendorProductsManifest"), getVendorManifestJson("DeimosEntratiFragmentVendorProductsManifest"),
getVendorManifestJson("DeimosFishmongerVendorManifest"), getVendorManifestJson("DeimosFishmongerVendorManifest"),
@ -44,25 +44,25 @@ const vendorManifests: IVendorManifest[] = [
getVendorManifestJson("ZarimanCommisionsManifestArchimedean") getVendorManifestJson("ZarimanCommisionsManifestArchimedean")
]; ];
export const getVendorManifestByTypeName = (typeName: string): IVendorManifest | undefined => { export const getVendorManifestByTypeName = (typeName: string): IVendorManifestPreprocessed | undefined => {
for (const vendorManifest of vendorManifests) { for (const vendorManifest of rawVendorManifests) {
if (vendorManifest.VendorInfo.TypeName == typeName) { if (vendorManifest.VendorInfo.TypeName == typeName) {
return vendorManifest; return preprocessVendorManifest(vendorManifest);
} }
} }
return undefined; return undefined;
}; };
export const getVendorManifestByOid = (oid: string): IVendorManifest | undefined => { export const getVendorManifestByOid = (oid: string): IVendorManifestPreprocessed | undefined => {
for (const vendorManifest of vendorManifests) { for (const vendorManifest of rawVendorManifests) {
if (vendorManifest.VendorInfo._id.$oid == oid) { if (vendorManifest.VendorInfo._id.$oid == oid) {
return vendorManifest; return preprocessVendorManifest(vendorManifest);
} }
} }
return undefined; return undefined;
}; };
export const preprocessVendorManifest = (originalManifest: IVendorManifest): IVendorManifestPreprocessed => { const preprocessVendorManifest = (originalManifest: IRawVendorManifest): IVendorManifestPreprocessed => {
if (Date.now() >= parseInt(originalManifest.VendorInfo.Expiry.$date.$numberLong)) { if (Date.now() >= parseInt(originalManifest.VendorInfo.Expiry.$date.$numberLong)) {
const manifest = structuredClone(originalManifest); const manifest = structuredClone(originalManifest);
const info = manifest.VendorInfo; const info = manifest.VendorInfo;

View File

@ -38,7 +38,7 @@ interface IVendorInfoPreprocessed extends Omit<IVendorInfo, "ItemManifest"> {
ItemManifest: IItemManifestPreprocessed[]; ItemManifest: IItemManifestPreprocessed[];
} }
export interface IVendorManifest { export interface IRawVendorManifest {
VendorInfo: IVendorInfo; VendorInfo: IVendorInfo;
} }