返回提交历史
Modified
src/controllers/api/purchaseController.ts
+2
-2
Modified
src/helpers/purchaseHelpers.ts
+1
-39
XFEstudio/XFESpaceNinjaServer
fix: inconsistent handling of purchase request (#594)
f2ae465d
代码差异
2 个文件
+3
-41
@@ -1,11 +1,11 @@
1
1
import { RequestHandler } from "express";
2
2
import { getAccountIdForRequest } from "@/src/services/loginService";
3
import { toPurchaseRequest } from "@/src/helpers/purchaseHelpers";
3
import { IPurchaseRequest } from "@/src/types/purchaseTypes";
4
4
import { handlePurchase } from "@/src/services/purchaseService";
5
5
6
6
// eslint-disable-next-line @typescript-eslint/no-misused-promises
7
7
export const purchaseController: RequestHandler = async (req, res) => {
8
const purchaseRequest = toPurchaseRequest(JSON.parse(String(req.body)));
8
const purchaseRequest = JSON.parse(String(req.body)) as IPurchaseRequest;
9
9
const accountId = await getAccountIdForRequest(req);
10
10
const response = await handlePurchase(purchaseRequest, accountId);
11
11
res.json(response);
@@ -1,43 +1,5 @@
1
import { parseBoolean, parseNumber, parseString } from "@/src/helpers/general";
2
1
import { slotPurchaseNameToSlotName } from "@/src/services/purchaseService";
3
import { IPurchaseRequest, SlotPurchaseName } from "@/src/types/purchaseTypes";
4
5
export const toPurchaseRequest = (purchaseRequest: unknown): IPurchaseRequest => {
6
if (!purchaseRequest || typeof purchaseRequest !== "object") {
7
throw new Error("incorrect or missing purchase request data");
8
}
9
10
if (
11
"PurchaseParams" in purchaseRequest &&
12
"buildLabel" in purchaseRequest &&
13
purchaseRequest.PurchaseParams &&
14
typeof purchaseRequest.PurchaseParams === "object" &&
15
"Source" in purchaseRequest.PurchaseParams &&
16
"StoreItem" in purchaseRequest.PurchaseParams &&
17
"StorePage" in purchaseRequest.PurchaseParams &&
18
"SearchTerm" in purchaseRequest.PurchaseParams &&
19
"CurrentLocation" in purchaseRequest.PurchaseParams &&
20
"Quantity" in purchaseRequest.PurchaseParams &&
21
"UsePremium" in purchaseRequest.PurchaseParams &&
22
"ExpectedPrice" in purchaseRequest.PurchaseParams
23
) {
24
return {
25
PurchaseParams: {
26
Source: parseNumber(purchaseRequest.PurchaseParams.Source),
27
StoreItem: parseString(purchaseRequest.PurchaseParams.StoreItem),
28
StorePage: parseString(purchaseRequest.PurchaseParams.StorePage),
29
SearchTerm: parseString(purchaseRequest.PurchaseParams.SearchTerm),
30
CurrentLocation: parseString(purchaseRequest.PurchaseParams.CurrentLocation),
31
Quantity: parseNumber(purchaseRequest.PurchaseParams.Quantity),
32
UsePremium: parseBoolean(purchaseRequest.PurchaseParams.UsePremium),
33
ExpectedPrice: parseNumber(purchaseRequest.PurchaseParams.ExpectedPrice)
34
},
35
buildLabel: parseString(purchaseRequest.buildLabel)
36
};
37
}
38
39
throw new Error("invalid purchaseRequest");
40
};
2
import { SlotPurchaseName } from "@/src/types/purchaseTypes";
41
3
42
4
export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => {
43
5
return slotPurchaseName in slotPurchaseNameToSlotName;