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