fix: inconsistent handling of purchase request (#594)
This commit is contained in:
parent
c2a9fc6609
commit
f2ae465dd9
@ -1,11 +1,11 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { toPurchaseRequest } from "@/src/helpers/purchaseHelpers";
|
||||
import { IPurchaseRequest } from "@/src/types/purchaseTypes";
|
||||
import { handlePurchase } from "@/src/services/purchaseService";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
export const purchaseController: RequestHandler = async (req, res) => {
|
||||
const purchaseRequest = toPurchaseRequest(JSON.parse(String(req.body)));
|
||||
const purchaseRequest = JSON.parse(String(req.body)) as IPurchaseRequest;
|
||||
const accountId = await getAccountIdForRequest(req);
|
||||
const response = await handlePurchase(purchaseRequest, accountId);
|
||||
res.json(response);
|
||||
|
@ -1,43 +1,5 @@
|
||||
import { parseBoolean, parseNumber, parseString } from "@/src/helpers/general";
|
||||
import { slotPurchaseNameToSlotName } from "@/src/services/purchaseService";
|
||||
import { IPurchaseRequest, SlotPurchaseName } from "@/src/types/purchaseTypes";
|
||||
|
||||
export const toPurchaseRequest = (purchaseRequest: unknown): IPurchaseRequest => {
|
||||
if (!purchaseRequest || typeof purchaseRequest !== "object") {
|
||||
throw new Error("incorrect or missing purchase request data");
|
||||
}
|
||||
|
||||
if (
|
||||
"PurchaseParams" in purchaseRequest &&
|
||||
"buildLabel" in purchaseRequest &&
|
||||
purchaseRequest.PurchaseParams &&
|
||||
typeof purchaseRequest.PurchaseParams === "object" &&
|
||||
"Source" in purchaseRequest.PurchaseParams &&
|
||||
"StoreItem" in purchaseRequest.PurchaseParams &&
|
||||
"StorePage" in purchaseRequest.PurchaseParams &&
|
||||
"SearchTerm" in purchaseRequest.PurchaseParams &&
|
||||
"CurrentLocation" in purchaseRequest.PurchaseParams &&
|
||||
"Quantity" in purchaseRequest.PurchaseParams &&
|
||||
"UsePremium" in purchaseRequest.PurchaseParams &&
|
||||
"ExpectedPrice" in purchaseRequest.PurchaseParams
|
||||
) {
|
||||
return {
|
||||
PurchaseParams: {
|
||||
Source: parseNumber(purchaseRequest.PurchaseParams.Source),
|
||||
StoreItem: parseString(purchaseRequest.PurchaseParams.StoreItem),
|
||||
StorePage: parseString(purchaseRequest.PurchaseParams.StorePage),
|
||||
SearchTerm: parseString(purchaseRequest.PurchaseParams.SearchTerm),
|
||||
CurrentLocation: parseString(purchaseRequest.PurchaseParams.CurrentLocation),
|
||||
Quantity: parseNumber(purchaseRequest.PurchaseParams.Quantity),
|
||||
UsePremium: parseBoolean(purchaseRequest.PurchaseParams.UsePremium),
|
||||
ExpectedPrice: parseNumber(purchaseRequest.PurchaseParams.ExpectedPrice)
|
||||
},
|
||||
buildLabel: parseString(purchaseRequest.buildLabel)
|
||||
};
|
||||
}
|
||||
|
||||
throw new Error("invalid purchaseRequest");
|
||||
};
|
||||
import { SlotPurchaseName } from "@/src/types/purchaseTypes";
|
||||
|
||||
export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => {
|
||||
return slotPurchaseName in slotPurchaseNameToSlotName;
|
||||
|
Loading…
x
Reference in New Issue
Block a user