ReferalAllocator.coffee 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. logger = require('logger-sharelatex')
  2. User = require('../../models/User').User
  3. SubscriptionLocator = require "../Subscription/SubscriptionLocator"
  4. Settings = require "settings-sharelatex"
  5. module.exports = ReferalAllocator =
  6. allocate: (referal_id, new_user_id, referal_source, referal_medium, callback = ->)->
  7. if !referal_id?
  8. return logger.log new_user_id:new_user_id, "no referal for user"
  9. logger.log referal_id:referal_id, new_user_id:new_user_id, "allocating users referal"
  10. query = {"referal_id":referal_id}
  11. User.findOne query, (error, user) ->
  12. return callback(error) if error?
  13. return callback(new Error("user not found")) if !user? or !user._id?
  14. if referal_source == "bonus"
  15. User.update query, {
  16. $push:
  17. refered_users: new_user_id
  18. $inc:
  19. refered_user_count: 1
  20. }, {}, (err)->
  21. if err?
  22. logger.err err:err, referal_id:referal_id, new_user_id:new_user_id, "something went wrong allocating referal"
  23. return callback(err)
  24. ReferalAllocator.assignBonus user._id, callback
  25. else
  26. callback()
  27. assignBonus: (user_id, callback = (error) ->) ->
  28. SubscriptionLocator.getUsersSubscription user_id, (error, subscription) ->
  29. return callback(error) if error?
  30. logger.log
  31. subscription: subscription,
  32. user_id: user_id,
  33. "checking user doesn't have a subsciption before assigning bonus"
  34. if !subscription? or !subscription.planCode?
  35. query = _id: user_id
  36. User.findOne query, (error, user) ->
  37. return callback(error) if error
  38. return callback(new Error("user not found")) if !user?
  39. logger.log
  40. user_id: user_id,
  41. refered_user_count: user.refered_user_count,
  42. bonus_features: Settings.bonus_features[user.refered_user_count],
  43. "assigning bonus"
  44. if user.refered_user_count? and Settings.bonus_features[user.refered_user_count]?
  45. User.update query, { $set: features: Settings.bonus_features[user.refered_user_count] }, callback
  46. else
  47. callback()
  48. else
  49. callback()