50 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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");
 | 
						|
};
 | 
						|
 | 
						|
export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => {
 | 
						|
    return slotPurchaseName in slotPurchaseNameToSlotName;
 | 
						|
};
 | 
						|
 | 
						|
export const parseSlotPurchaseName = (slotPurchaseName: string) => {
 | 
						|
    if (!isSlotPurchaseName(slotPurchaseName)) throw new Error(`invalid slot name ${slotPurchaseName}`);
 | 
						|
    return slotPurchaseName;
 | 
						|
};
 |