ReferalFeatures.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. const _ = require('lodash')
  2. const { callbackify } = require('util')
  3. const { User } = require('../../models/User')
  4. const Settings = require('@overleaf/settings')
  5. const ReferalFeatures = {
  6. async getBonusFeatures(userId) {
  7. const query = { _id: userId }
  8. const user = await User.findOne(query, { refered_user_count: 1 }).exec()
  9. if (user == null) {
  10. throw new Error(`user not found ${userId} for assignBonus`)
  11. }
  12. if (user.refered_user_count != null && user.refered_user_count > 0) {
  13. const newFeatures = ReferalFeatures._calculateFeatures(user)
  14. return newFeatures
  15. }
  16. return {}
  17. },
  18. _calculateFeatures(user) {
  19. const bonusLevel = ReferalFeatures._getBonusLevel(user)
  20. return (
  21. (Settings.bonus_features != null
  22. ? Settings.bonus_features[`${bonusLevel}`]
  23. : undefined) || {}
  24. )
  25. },
  26. _getBonusLevel(user) {
  27. let highestBonusLevel = 0
  28. _.forEach(_.keys(Settings.bonus_features), function (level) {
  29. const levelIsLessThanUser = level <= user.refered_user_count
  30. const levelIsMoreThanCurrentHighest = level >= highestBonusLevel
  31. if (levelIsLessThanUser && levelIsMoreThanCurrentHighest) {
  32. return (highestBonusLevel = level)
  33. }
  34. })
  35. return highestBonusLevel
  36. },
  37. }
  38. module.exports = {
  39. getBonusFeatures: callbackify(ReferalFeatures.getBonusFeatures),
  40. promises: ReferalFeatures,
  41. }