forked from OpenWF/SpaceNinjaServer
		
	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 { RequestHandler } from "express";
 | 
				
			||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
import { toPurchaseRequest } from "@/src/helpers/purchaseHelpers";
 | 
					import { IPurchaseRequest } from "@/src/types/purchaseTypes";
 | 
				
			||||||
import { handlePurchase } from "@/src/services/purchaseService";
 | 
					import { handlePurchase } from "@/src/services/purchaseService";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
 | 
					// eslint-disable-next-line @typescript-eslint/no-misused-promises
 | 
				
			||||||
export const purchaseController: RequestHandler = async (req, res) => {
 | 
					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 accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
    const response = await handlePurchase(purchaseRequest, accountId);
 | 
					    const response = await handlePurchase(purchaseRequest, accountId);
 | 
				
			||||||
    res.json(response);
 | 
					    res.json(response);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,43 +1,5 @@
 | 
				
			|||||||
import { parseBoolean, parseNumber, parseString } from "@/src/helpers/general";
 | 
					 | 
				
			||||||
import { slotPurchaseNameToSlotName } from "@/src/services/purchaseService";
 | 
					import { slotPurchaseNameToSlotName } from "@/src/services/purchaseService";
 | 
				
			||||||
import { IPurchaseRequest, SlotPurchaseName } from "@/src/types/purchaseTypes";
 | 
					import { 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");
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => {
 | 
					export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => {
 | 
				
			||||||
    return slotPurchaseName in slotPurchaseNameToSlotName;
 | 
					    return slotPurchaseName in slotPurchaseNameToSlotName;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user