ReferalAllocator.coffee 2.1 KB

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