ReferalFeatures.js 1.4 KB

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