Files
overleaf-cep/services/web/app/src/Features/Referal/ReferalFeatures.js
T
Miguel Serrano 95bf78d485 Merge pull request #16346 from overleaf/msm-remove-underscore
Remove `underscore` in monorepo

GitOrigin-RevId: fd3b92e3e8a940a7a086669232102320c34a89e2
2024-01-09 09:03:58 +00:00

55 lines
1.6 KiB
JavaScript

const _ = require('lodash')
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
_.forEach(_.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),
}