ReferalFeatures.coffee 1.7 KB

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