query cache on the server side
would be great to have query cache on the server side so static data doesnt cause billing increase
this would be great to generate static code based on item ids then when convex is deployed. but probably asking too much hereI don't quite follow here
const item = await db
.query("items")
.filter(q => q.eq(q.field("name"), itemName))
.first();const ITEM_ID_MAPPING = {
[ItemNames.Coins]: "YOUR_COINS_ID_HERE",
[ItemNames.Spins]: "YOUR_SPINS_ID_HERE",
[ItemNames.Ticket]: "YOUR_TICKET_ID_HERE",
// ... other items
} as const;const ITEM_ID_MAPPING = {
[ItemNames.Coins]: "YOUR_COINS_ID_HERE",
[ItemNames.Spins]: "YOUR_SPINS_ID_HERE",
[ItemNames.Ticket]: "YOUR_TICKET_ID_HERE",
// ... other items
} as const;export async function hasEnoughCoins(
ctx: { db: DatabaseReader },
userId: Id<"users">,
requiredAmount: number
): Promise<boolean> {
const coinsItemId = await getItemIdByName(ctx, ItemNames.Coins);
const coins = await getItemAmount(ctx, userId, coinsItemId);
return coins >= requiredAmount;
}
export async function getItemIdByName(
ctx: { db: DatabaseReader },
itemName: ItemNames,
): Promise<Id<"items">> {
const { db } = ctx;
const item = await db
.query("items")
.filter(q => q.eq(q.field("name"), itemName))
.first();
if (!item) {
throw new Error(`Item not found: ${itemName}`);
}
return item._id;
}