Files
overleaf-cep/services/web/app/src/Features/Referal/ReferalFeatures.js
T
Eric Mc Sween 6a6264f970 Merge pull request #5087 from overleaf/em-promisify-subscription-updater
Promisify FeaturesUpdater and SubscriptionHandler

GitOrigin-RevId: 1a9725afa119c0eaee3d975a11197b6f702f1307
2021-09-21 08:03:10 +00:00

55 lines
1.6 KiB
JavaScript

const _ = require('underscore')
const { promisify } = require('util')
const { User } = require('../../models/User')
const Settings = require('@overleaf/settings')
let ReferalFeatures
module.exports = ReferalFeatures = {
getBonusFeatures(userId, callback) {
if (callback == null) {
callback = function () {}
}
const query = { _id: userId }
User.findOne(query, { refered_user_count: 1 }, function (error, user) {
if (error) {
return callback(error)
}
if (user == null) {
return callback(new Error(`user not found ${userId} for assignBonus`))
}
if (user.refered_user_count != null && user.refered_user_count > 0) {
const newFeatures = ReferalFeatures._calculateFeatures(user)
callback(null, newFeatures)
} else {
callback(null, {})
}
})
},
_calculateFeatures(user) {
const bonusLevel = ReferalFeatures._getBonusLevel(user)
return (
(Settings.bonus_features != null
? Settings.bonus_features[`${bonusLevel}`]
: undefined) || {}
)
},
_getBonusLevel(user) {
let highestBonusLevel = 0
_.each(_.keys(Settings.bonus_features), function (level) {
const levelIsLessThanUser = level <= user.refered_user_count
const levelIsMoreThanCurrentHighest = level >= highestBonusLevel
if (levelIsLessThanUser && levelIsMoreThanCurrentHighest) {
return (highestBonusLevel = level)
}
})
return highestBonusLevel
},
}
module.exports.promises = {
getBonusFeatures: promisify(module.exports.getBonusFeatures),
}