const mongoose = require('mongoose'); const balanceSchema = require('./schema/balance'); const { getMultiplier } = require('./tx'); const { logger } = require('~/config'); balanceSchema.statics.check = async function ({ user, model, endpoint, valueKey, tokenType, amount, endpointTokenConfig, }) { const multiplier = getMultiplier({ valueKey, tokenType, model, endpoint, endpointTokenConfig }); const tokenCost = amount * multiplier; const { tokenCredits: balance } = (await this.findOne({ user }, 'tokenCredits').lean()) ?? {}; logger.debug('[Balance.check]', { user, model, endpoint, valueKey, tokenType, amount, balance, multiplier, endpointTokenConfig: !!endpointTokenConfig, }); if (!balance) { return { canSpend: false, balance: 0, tokenCost, }; } logger.debug('[Balance.check]', { tokenCost }); return { canSpend: balance >= tokenCost, balance, tokenCost }; }; module.exports = mongoose.model('Balance', balanceSchema);