ReferalFeatures.coffee 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. _ = require("underscore")
  2. logger = require('logger-sharelatex')
  3. UserGetter = require('../User/UserGetter')
  4. Settings = require "settings-sharelatex"
  5. module.exports = ReferalFeatures =
  6. getBonusFeatures: (user_id, callback = (error) ->) ->
  7. UserGetter.getUserOrUserStubById user_id, null, (error, user) ->
  8. return callback(error) if error
  9. return callback(new Error("user not found #{user_id} for assignBonus")) if !user?
  10. logger.log user_id: user_id, refered_user_count: user.refered_user_count, "assigning bonus"
  11. if user.refered_user_count? and user.refered_user_count > 0
  12. newFeatures = ReferalFeatures._calculateFeatures(user)
  13. callback null, newFeatures
  14. else
  15. callback null, {}
  16. _calculateFeatures : (user)->
  17. bonusLevel = ReferalFeatures._getBonusLevel(user)
  18. currentFeatures = _.clone(user.features) #need to clone because we exend with underscore later
  19. betterBonusFeatures = {}
  20. _.each Settings.bonus_features["#{bonusLevel}"], (bonusLevel, key)->
  21. currentLevel = user?.features?[key]
  22. if _.isBoolean(currentLevel) and currentLevel == false
  23. betterBonusFeatures[key] = bonusLevel
  24. if _.isNumber(currentLevel)
  25. if currentLevel == -1
  26. return
  27. bonusIsGreaterThanCurrent = currentLevel < bonusLevel
  28. if bonusIsGreaterThanCurrent or bonusLevel == -1
  29. betterBonusFeatures[key] = bonusLevel
  30. newFeatures = _.extend(currentFeatures, betterBonusFeatures)
  31. return newFeatures
  32. _getBonusLevel: (user)->
  33. highestBonusLevel = 0
  34. _.each _.keys(Settings.bonus_features), (level)->
  35. levelIsLessThanUser = level <= user.refered_user_count
  36. levelIsMoreThanCurrentHighest = level >= highestBonusLevel
  37. if levelIsLessThanUser and levelIsMoreThanCurrentHighest
  38. highestBonusLevel = level
  39. return highestBonusLevel