Booster purchase
This commit is contained in:
		
							parent
							
								
									bfdc6bfaff
								
							
						
					
					
						commit
						5facad179c
					
				@ -1,5 +1,5 @@
 | 
				
			|||||||
import { Model, Schema, Types, model } from "mongoose";
 | 
					import { Model, Schema, Types, model } from "mongoose";
 | 
				
			||||||
import { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase } from "../types/inventoryTypes/inventoryTypes";
 | 
					import { FlavourItem, RawUpgrade, MiscItem, IInventoryDatabase, Booster } from "../types/inventoryTypes/inventoryTypes";
 | 
				
			||||||
import { Oid } from "../types/commonTypes";
 | 
					import { Oid } from "../types/commonTypes";
 | 
				
			||||||
import { ISuitDatabase, ISuitDocument } from "@/src/types/inventoryTypes/SuitTypes";
 | 
					import { ISuitDatabase, ISuitDocument } from "@/src/types/inventoryTypes/SuitTypes";
 | 
				
			||||||
import { IWeaponDatabase } from "@/src/types/inventoryTypes/weaponTypes";
 | 
					import { IWeaponDatabase } from "@/src/types/inventoryTypes/weaponTypes";
 | 
				
			||||||
@ -66,6 +66,11 @@ const WeaponSchema = new Schema({
 | 
				
			|||||||
    UnlockLevel: Number
 | 
					    UnlockLevel: Number
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const BoosterSchema = new Schema({
 | 
				
			||||||
 | 
					    ExpiryDate: Number,
 | 
				
			||||||
 | 
					    ItemType: String
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WeaponSchema.set("toJSON", {
 | 
					WeaponSchema.set("toJSON", {
 | 
				
			||||||
    transform(_document, returnedObject) {
 | 
					    transform(_document, returnedObject) {
 | 
				
			||||||
        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
 | 
					        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
 | 
				
			||||||
@ -213,7 +218,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>({
 | 
				
			|||||||
    LoreFragmentScans: [Schema.Types.Mixed],
 | 
					    LoreFragmentScans: [Schema.Types.Mixed],
 | 
				
			||||||
    EquippedEmotes: [String],
 | 
					    EquippedEmotes: [String],
 | 
				
			||||||
    PendingTrades: [Schema.Types.Mixed],
 | 
					    PendingTrades: [Schema.Types.Mixed],
 | 
				
			||||||
    Boosters: [Schema.Types.Mixed],
 | 
					    Boosters: [BoosterSchema],
 | 
				
			||||||
    ActiveDojoColorResearch: String,
 | 
					    ActiveDojoColorResearch: String,
 | 
				
			||||||
    SentientSpawnChanceBoosters: Schema.Types.Mixed,
 | 
					    SentientSpawnChanceBoosters: Schema.Types.Mixed,
 | 
				
			||||||
    Affiliations: [Schema.Types.Mixed],
 | 
					    Affiliations: [Schema.Types.Mixed],
 | 
				
			||||||
@ -336,6 +341,7 @@ type InventoryDocumentProps = {
 | 
				
			|||||||
    FlavourItems: Types.DocumentArray<FlavourItem>;
 | 
					    FlavourItems: Types.DocumentArray<FlavourItem>;
 | 
				
			||||||
    RawUpgrades: Types.DocumentArray<RawUpgrade>;
 | 
					    RawUpgrades: Types.DocumentArray<RawUpgrade>;
 | 
				
			||||||
    MiscItems: Types.DocumentArray<MiscItem>;
 | 
					    MiscItems: Types.DocumentArray<MiscItem>;
 | 
				
			||||||
 | 
					    Boosters: Types.DocumentArray<Booster>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type InventoryModelType = Model<IInventoryDatabase, {}, InventoryDocumentProps>;
 | 
					type InventoryModelType = Model<IInventoryDatabase, {}, InventoryDocumentProps>;
 | 
				
			||||||
 | 
				
			|||||||
@ -186,4 +186,30 @@ export const missionInventoryUpdate = async (data: MissionInventoryUpdate, accou
 | 
				
			|||||||
    await inventory.save();
 | 
					    await inventory.save();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const addBooster = async (boosterName: string, accountId: string): Promise<void> => {
 | 
				
			||||||
 | 
					    const match = boosterName.match(/(\d+)Day/);
 | 
				
			||||||
 | 
					    if (!match) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const extractedDigit = Number(match[1]);
 | 
				
			||||||
 | 
					    const ItemType = boosterName.replace(`${extractedDigit}Day`, "");
 | 
				
			||||||
 | 
					    const plusTime = 86400 * extractedDigit;
 | 
				
			||||||
 | 
					    const currentTime = Math.floor(Date.now() / 1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    const { Boosters } = inventory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let itemIndex = Boosters.findIndex(i => i.ItemType === ItemType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (itemIndex !== -1) {
 | 
				
			||||||
 | 
					        const existingBooster = Boosters[itemIndex];
 | 
				
			||||||
 | 
					        existingBooster.ExpiryDate = Math.max(existingBooster.ExpiryDate, currentTime) + plusTime;
 | 
				
			||||||
 | 
					        inventory.markModified(`Boosters.${itemIndex}.ExpiryDate`);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        itemIndex = Boosters.push({ ItemType, ExpiryDate: currentTime + plusTime }) - 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const changedInventory = await inventory.save();
 | 
				
			||||||
 | 
					    return changedInventory.Boosters[itemIndex].toJSON();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { createInventory, addPowerSuit };
 | 
					export { createInventory, addPowerSuit };
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,7 @@
 | 
				
			|||||||
import { getWeaponType } from "@/src/helpers/purchaseHelpers";
 | 
					import { getWeaponType } from "@/src/helpers/purchaseHelpers";
 | 
				
			||||||
import { getSubstringFromKeyword } from "@/src/helpers/stringHelpers";
 | 
					import { getSubstringFromKeyword } from "@/src/helpers/stringHelpers";
 | 
				
			||||||
import {
 | 
					import { addBooster, addCustomization, addPowerSuit, addWeapon, updateSlots } from "@/src/services/inventoryService";
 | 
				
			||||||
    addCustomization,
 | 
					import { IPurchaseRequest, SlotType } from "@/src/types/purchaseTypes";
 | 
				
			||||||
    addPowerSuit,
 | 
					 | 
				
			||||||
    addWeapon,
 | 
					 | 
				
			||||||
    updateCurrency,
 | 
					 | 
				
			||||||
    updateSlots
 | 
					 | 
				
			||||||
} from "@/src/services/inventoryService";
 | 
					 | 
				
			||||||
import { IPurchaseRequest, IPurchaseResponse, SlotType } from "@/src/types/purchaseTypes";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const getStoreItemCategory = (storeItem: string) => {
 | 
					export const getStoreItemCategory = (storeItem: string) => {
 | 
				
			||||||
    const storeItemString = getSubstringFromKeyword(storeItem, "StoreItems/");
 | 
					    const storeItemString = getSubstringFromKeyword(storeItem, "StoreItems/");
 | 
				
			||||||
@ -41,6 +35,9 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI
 | 
				
			|||||||
        case "Types":
 | 
					        case "Types":
 | 
				
			||||||
            purchaseResponse = await handleTypesPurchase(internalName, accountId);
 | 
					            purchaseResponse = await handleTypesPurchase(internalName, accountId);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					        case "Boosters":
 | 
				
			||||||
 | 
					            purchaseResponse = await handleBoostersPurchase(internalName, accountId);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
            throw new Error(`unknown store category: ${storeCategory} not implemented or new`);
 | 
					            throw new Error(`unknown store category: ${storeCategory} not implemented or new`);
 | 
				
			||||||
@ -114,3 +111,13 @@ const handleSuitCustomizationsPurchase = async (customizationName: string, accou
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const handleBoostersPurchase = async (boosterName: string, accountId: string) => {
 | 
				
			||||||
 | 
					    const addedBooster = await addBooster(boosterName, accountId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					        InventoryChanges: {
 | 
				
			||||||
 | 
					            Boosters: [addedBooster]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user