forked from OpenWF/SpaceNinjaServer
		
	improve: purchases (#161)
Co-authored-by: Sainan <Sainan@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									d62785a883
								
							
						
					
					
						commit
						971d149122
					
				@ -27,7 +27,7 @@ export const inventorySlotsController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    //TODO: check which slot was purchased because pvpBonus is also possible
 | 
					    //TODO: check which slot was purchased because pvpBonus is also possible
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const currencyChanges = await updateCurrency(-20, true, accountId);
 | 
					    const currencyChanges = await updateCurrency(20, true, accountId);
 | 
				
			||||||
    await updateSlots(accountId, SlotNameToInventoryName.LOADOUT, 1, 1);
 | 
					    await updateSlots(accountId, SlotNameToInventoryName.LOADOUT, 1, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //console.log({ InventoryChanges: currencyChanges }, " added loadout changes:");
 | 
					    //console.log({ InventoryChanges: currencyChanges }, " added loadout changes:");
 | 
				
			||||||
 | 
				
			|||||||
@ -93,15 +93,19 @@ export const updateSlots = async (accountId: string, slotName: SlotNames, slotAm
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const updateCurrency = async (price: number, usePremium: boolean, accountId: string) => {
 | 
					export const updateCurrency = async (price: number, usePremium: boolean, accountId: string) => {
 | 
				
			||||||
 | 
					    if (config.infiniteResources) {
 | 
				
			||||||
 | 
					        return {};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const inventory = await getInventory(accountId);
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (usePremium) {
 | 
					    if (usePremium) {
 | 
				
			||||||
        if (inventory.PremiumCreditsFree > 0) {
 | 
					        if (inventory.PremiumCreditsFree > 0) {
 | 
				
			||||||
            inventory.PremiumCreditsFree += price;
 | 
					            inventory.PremiumCreditsFree -= Math.min(price, inventory.PremiumCreditsFree);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        inventory.PremiumCredits += price;
 | 
					        inventory.PremiumCredits -= price;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        inventory.RegularCredits += price;
 | 
					        inventory.RegularCredits -= price;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const modifiedPaths = inventory.modifiedPaths();
 | 
					    const modifiedPaths = inventory.modifiedPaths();
 | 
				
			||||||
 | 
				
			|||||||
@ -5,12 +5,15 @@ import {
 | 
				
			|||||||
    addBooster,
 | 
					    addBooster,
 | 
				
			||||||
    addCustomization,
 | 
					    addCustomization,
 | 
				
			||||||
    addMechSuit,
 | 
					    addMechSuit,
 | 
				
			||||||
 | 
					    addMiscItems,
 | 
				
			||||||
    addPowerSuit,
 | 
					    addPowerSuit,
 | 
				
			||||||
    addSentinel,
 | 
					    addSentinel,
 | 
				
			||||||
    addWeapon,
 | 
					    addWeapon,
 | 
				
			||||||
 | 
					    getInventory,
 | 
				
			||||||
    updateCurrency,
 | 
					    updateCurrency,
 | 
				
			||||||
    updateSlots
 | 
					    updateSlots
 | 
				
			||||||
} from "@/src/services/inventoryService";
 | 
					} from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
				
			||||||
import { IPurchaseRequest, IPurchaseResponse, SlotNameToInventoryName, SlotPurchase } from "@/src/types/purchaseTypes";
 | 
					import { IPurchaseRequest, IPurchaseResponse, SlotNameToInventoryName, SlotPurchase } from "@/src/types/purchaseTypes";
 | 
				
			||||||
import { logger } from "@/src/utils/logger";
 | 
					import { logger } from "@/src/utils/logger";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -44,11 +47,18 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI
 | 
				
			|||||||
            inventoryChanges = await handleWeaponsPurchase(internalName, accountId);
 | 
					            inventoryChanges = await handleWeaponsPurchase(internalName, accountId);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case "Types":
 | 
					        case "Types":
 | 
				
			||||||
            inventoryChanges = await handleTypesPurchase(internalName, accountId);
 | 
					            inventoryChanges = await handleTypesPurchase(
 | 
				
			||||||
 | 
					                internalName,
 | 
				
			||||||
 | 
					                accountId,
 | 
				
			||||||
 | 
					                purchaseRequest.PurchaseParams.Quantity
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case "Boosters":
 | 
					        case "Boosters":
 | 
				
			||||||
            inventoryChanges = await handleBoostersPurchase(internalName, accountId);
 | 
					            inventoryChanges = await handleBoostersPurchase(internalName, accountId);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					        case "Interface":
 | 
				
			||||||
 | 
					            inventoryChanges = await handleCustomizationPurchase(internalName, accountId);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
            const errorMessage = `unknown store category: ${storeCategory} not implemented or new`;
 | 
					            const errorMessage = `unknown store category: ${storeCategory} not implemented or new`;
 | 
				
			||||||
            logger.error(errorMessage);
 | 
					            logger.error(errorMessage);
 | 
				
			||||||
@ -163,18 +173,21 @@ const handlePowersuitPurchase = async (powersuitName: string, accountId: string)
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//TODO: change to getInventory, apply changes then save at the end
 | 
					//TODO: change to getInventory, apply changes then save at the end
 | 
				
			||||||
const handleTypesPurchase = async (typesName: string, accountId: string) => {
 | 
					const handleTypesPurchase = async (typesName: string, accountId: string, quantity: number) => {
 | 
				
			||||||
    const typeCategory = getStoreItemTypesCategory(typesName);
 | 
					    const typeCategory = getStoreItemTypesCategory(typesName);
 | 
				
			||||||
    logger.debug(`type category ${typeCategory}`);
 | 
					    logger.debug(`type category ${typeCategory}`);
 | 
				
			||||||
    switch (typeCategory) {
 | 
					    switch (typeCategory) {
 | 
				
			||||||
 | 
					        case "AvatarImages":
 | 
				
			||||||
        case "SuitCustomizations":
 | 
					        case "SuitCustomizations":
 | 
				
			||||||
            return await handleSuitCustomizationsPurchase(typesName, accountId);
 | 
					            return await handleCustomizationPurchase(typesName, accountId);
 | 
				
			||||||
        // case "Recipes":
 | 
					        // case "Recipes":
 | 
				
			||||||
        //     break;
 | 
					        //     break;
 | 
				
			||||||
        case "Sentinels":
 | 
					        case "Sentinels":
 | 
				
			||||||
            return await handleSentinelPurchase(typesName, accountId);
 | 
					            return await handleSentinelPurchase(typesName, accountId);
 | 
				
			||||||
        case "SlotItems":
 | 
					        case "SlotItems":
 | 
				
			||||||
            return await handleSlotPurchase(typesName, accountId);
 | 
					            return await handleSlotPurchase(typesName, accountId);
 | 
				
			||||||
 | 
					        case "Items":
 | 
				
			||||||
 | 
					            return await handleMiscItemPurchase(typesName, accountId, quantity);
 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
            throw new Error(`unknown Types category: ${typeCategory} not implemented or new`);
 | 
					            throw new Error(`unknown Types category: ${typeCategory} not implemented or new`);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -193,7 +206,7 @@ const handleSentinelPurchase = async (sentinelName: string, accountId: string) =
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const handleSuitCustomizationsPurchase = async (customizationName: string, accountId: string) => {
 | 
					const handleCustomizationPurchase = async (customizationName: string, accountId: string) => {
 | 
				
			||||||
    const customization = await addCustomization(customizationName, accountId);
 | 
					    const customization = await addCustomization(customizationName, accountId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
@ -228,3 +241,20 @@ const handleBoostersPurchase = async (boosterStoreName: string, accountId: strin
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const handleMiscItemPurchase = async (uniqueName: string, accountId: string, quantity: number) => {
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    const miscItemChanges = [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ItemType: uniqueName,
 | 
				
			||||||
 | 
					            ItemCount: quantity
 | 
				
			||||||
 | 
					        } satisfies IMiscItem
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    addMiscItems(inventory, miscItemChanges);
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					        InventoryChanges: {
 | 
				
			||||||
 | 
					            MiscItems: miscItemChanges
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user