SubscriptionUpdater.coffee 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. async = require("async")
  2. _ = require("underscore")
  3. Subscription = require('../../models/Subscription').Subscription
  4. SubscriptionLocator = require("./SubscriptionLocator")
  5. UserFeaturesUpdater = require("./UserFeaturesUpdater")
  6. PlansLocator = require("./PlansLocator")
  7. Settings = require("settings-sharelatex")
  8. logger = require("logger-sharelatex")
  9. ObjectId = require('mongoose').Types.ObjectId
  10. oneMonthInSeconds = 60 * 60 * 24 * 30
  11. module.exports =
  12. syncSubscription: (recurlySubscription, adminUser_id, callback) ->
  13. self = @
  14. logger.log adminUser_id:adminUser_id, recurlySubscription:recurlySubscription, "syncSubscription, creating new if subscription does not exist"
  15. SubscriptionLocator.getUsersSubscription adminUser_id, (err, subscription)->
  16. if subscription?
  17. logger.log adminUser_id:adminUser_id, recurlySubscription:recurlySubscription, "subscription does exist"
  18. self._updateSubscription recurlySubscription, subscription, callback
  19. else
  20. logger.log adminUser_id:adminUser_id, recurlySubscription:recurlySubscription, "subscription does not exist, creating a new one"
  21. self._createNewSubscription adminUser_id, (err, subscription)->
  22. self._updateSubscription recurlySubscription, subscription, callback
  23. # TODO: Remove this one month after the ability to start free trials was removed
  24. downgradeFreeTrial: (subscription, callback = (error)->) ->
  25. UserFeaturesUpdater.updateFeatures subscription.admin_id, Settings.defaultPlanCode, ->
  26. subscription.freeTrial.downgraded = true
  27. subscription.save callback
  28. addUserToGroup: (adminUser_id, user_id, callback)->
  29. logger.log adminUser_id:adminUser_id, user_id:user_id, "adding user into mongo subscription"
  30. searchOps =
  31. admin_id: adminUser_id
  32. insertOperation =
  33. "$addToSet": {member_ids:user_id}
  34. Subscription.findAndModify searchOps, insertOperation, (err, subscription)->
  35. UserFeaturesUpdater.updateFeatures user_id, subscription.planCode, callback
  36. removeUserFromGroup: (adminUser_id, user_id, callback)->
  37. searchOps =
  38. admin_id: adminUser_id
  39. removeOperation =
  40. "$pull": {member_ids:user_id}
  41. Subscription.update searchOps, removeOperation, ->
  42. UserFeaturesUpdater.updateFeatures user_id, Settings.defaultPlanCode, callback
  43. _createNewSubscription: (adminUser_id, callback)->
  44. logger.log adminUser_id:adminUser_id, "creating new subscription"
  45. subscription = new Subscription(admin_id:adminUser_id)
  46. subscription.freeTrial.allowed = false
  47. subscription.save (err)->
  48. callback err, subscription
  49. _updateSubscription: (recurlySubscription, subscription, callback)->
  50. logger.log recurlySubscription:recurlySubscription, subscription:subscription, "updaing subscription"
  51. plan = PlansLocator.findLocalPlanInSettings(recurlySubscription.plan.plan_code)
  52. if recurlySubscription.state == "expired"
  53. subscription.recurlySubscription_id = undefined
  54. subscription.planCode = Settings.defaultPlanCode
  55. else
  56. subscription.recurlySubscription_id = recurlySubscription.uuid
  57. subscription.freeTrial.expiresAt = undefined
  58. subscription.freeTrial.planCode = undefined
  59. subscription.freeTrial.allowed = true
  60. subscription.planCode = recurlySubscription.plan.plan_code
  61. if plan.groupPlan
  62. subscription.groupPlan = true
  63. subscription.membersLimit = plan.membersLimit
  64. subscription.save ->
  65. allIds = _.union subscription.members_id, [subscription.admin_id]
  66. jobs = allIds.map (user_id)->
  67. return (cb)->
  68. UserFeaturesUpdater.updateFeatures user_id, subscription.planCode, cb
  69. async.parallel jobs, callback