mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-26 05:51:04 +00:00
59 lines
2.1 KiB
CoffeeScript
59 lines
2.1 KiB
CoffeeScript
logger = require('logger-sharelatex')
|
|
User = require('../../models/User').User
|
|
AnalyticsManager = require("../Analytics/AnalyticsManager")
|
|
SubscriptionLocator = require "../Subscription/SubscriptionLocator"
|
|
Settings = require "settings-sharelatex"
|
|
|
|
module.exports = ReferalAllocator =
|
|
allocate: (referal_id, new_user_id, referal_source, referal_medium, callback = ->)->
|
|
if !referal_id?
|
|
return logger.log new_user_id:new_user_id, "no referal for user"
|
|
logger.log referal_id:referal_id, new_user_id:new_user_id, "allocating users referal"
|
|
|
|
query = {"referal_id":referal_id}
|
|
User.findOne query, (error, user) ->
|
|
return callback(error) if error?
|
|
return callback(new Error("user not found")) if !user? or !user._id?
|
|
|
|
# Can be backgrounded
|
|
AnalyticsManager.trackReferral user, referal_source, referal_medium
|
|
|
|
if referal_source == "bonus"
|
|
User.update query, {
|
|
$push:
|
|
refered_users: new_user_id
|
|
$inc:
|
|
refered_user_count: 1
|
|
}, {}, (err)->
|
|
if err?
|
|
logger.err err:err, referal_id:referal_id, new_user_id:new_user_id, "something went wrong allocating referal"
|
|
return callback(err)
|
|
ReferalAllocator.assignBonus user._id, callback
|
|
else
|
|
callback()
|
|
|
|
assignBonus: (user_id, callback = (error) ->) ->
|
|
SubscriptionLocator.getUsersSubscription user_id, (error, subscription) ->
|
|
return callback(error) if error?
|
|
logger.log
|
|
subscription: subscription,
|
|
user_id: user_id,
|
|
"checking user doesn't have a subsciption before assigning bonus"
|
|
if !subscription? or !subscription.planCode?
|
|
query = _id: user_id
|
|
User.findOne query, (error, user) ->
|
|
return callback(error) if error
|
|
return callback(new Error("user not found")) if !user?
|
|
logger.log
|
|
user_id: user_id,
|
|
refered_user_count: user.refered_user_count,
|
|
bonus_features: Settings.bonus_features[user.refered_user_count],
|
|
"assigning bonus"
|
|
if user.refered_user_count? and Settings.bonus_features[user.refered_user_count]?
|
|
User.update query, { $set: features: Settings.bonus_features[user.refered_user_count] }, callback
|
|
else
|
|
callback()
|
|
else
|
|
callback()
|
|
|
|
|