SubscriptionLocator.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. const { promisify } = require('util')
  2. const { Subscription } = require('../../models/Subscription')
  3. const { DeletedSubscription } = require('../../models/DeletedSubscription')
  4. const logger = require('@overleaf/logger')
  5. require('./GroupPlansData') // make sure dynamic group plans are loaded
  6. const SubscriptionLocator = {
  7. getUsersSubscription(userOrId, callback) {
  8. const userId = SubscriptionLocator._getUserId(userOrId)
  9. Subscription.findOne({ admin_id: userId }, function (err, subscription) {
  10. logger.debug({ userId }, 'got users subscription')
  11. callback(err, subscription)
  12. })
  13. },
  14. getUserIndividualSubscription(userOrId, callback) {
  15. const userId = SubscriptionLocator._getUserId(userOrId)
  16. Subscription.findOne(
  17. { admin_id: userId, groupPlan: false },
  18. function (err, subscription) {
  19. logger.debug({ userId }, 'got users individual subscription')
  20. callback(err, subscription)
  21. }
  22. )
  23. },
  24. getManagedGroupSubscriptions(userOrId, callback) {
  25. Subscription.find({
  26. manager_ids: userOrId,
  27. groupPlan: true,
  28. })
  29. .populate('admin_id')
  30. .exec(callback)
  31. },
  32. getMemberSubscriptions(userOrId, callback) {
  33. const userId = SubscriptionLocator._getUserId(userOrId)
  34. Subscription.find({ member_ids: userId })
  35. .populate('admin_id')
  36. .exec(callback)
  37. },
  38. getAdminEmail(subscriptionId, callback) {
  39. Subscription.findById(subscriptionId)
  40. .populate('admin_id', 'email')
  41. .exec((err, subscription) => {
  42. if (err) {
  43. return callback(err)
  44. }
  45. callback(err, subscription?.admin_id?.email)
  46. })
  47. },
  48. getAdminEmailAndName(subscriptionId, callback) {
  49. Subscription.findById(subscriptionId)
  50. .populate('admin_id', ['email', 'first_name', 'last_name'])
  51. .exec((err, subscription) => {
  52. if (err) {
  53. return callback(err)
  54. }
  55. callback(err, subscription?.admin_id)
  56. })
  57. },
  58. hasRecurlyGroupSubscription(userOrId, callback) {
  59. const userId = SubscriptionLocator._getUserId(userOrId)
  60. Subscription.exists(
  61. {
  62. groupPlan: true,
  63. recurlySubscription_id: { $exists: true },
  64. $or: [
  65. { member_ids: userId },
  66. { manager_ids: userId },
  67. { admin_id: userId },
  68. ],
  69. },
  70. callback
  71. )
  72. },
  73. getSubscription(subscriptionId, callback) {
  74. Subscription.findOne({ _id: subscriptionId }, callback)
  75. },
  76. getSubscriptionByMemberIdAndId(userId, subscriptionId, callback) {
  77. Subscription.findOne(
  78. { member_ids: userId, _id: subscriptionId },
  79. { _id: 1 },
  80. callback
  81. )
  82. },
  83. getGroupSubscriptionsMemberOf(userId, callback) {
  84. Subscription.find({ member_ids: userId }, { _id: 1, planCode: 1 }, callback)
  85. },
  86. getGroupsWithEmailInvite(email, callback) {
  87. Subscription.find({ invited_emails: email }, callback)
  88. },
  89. getGroupsWithTeamInvitesEmail(email, callback) {
  90. Subscription.find(
  91. { teamInvites: { $elemMatch: { email } } },
  92. { teamInvites: 1 },
  93. callback
  94. )
  95. },
  96. getGroupWithV1Id(v1TeamId, callback) {
  97. Subscription.findOne({ 'overleaf.id': v1TeamId }, callback)
  98. },
  99. getUserDeletedSubscriptions(userId, callback) {
  100. DeletedSubscription.find({ 'subscription.admin_id': userId }, callback)
  101. },
  102. getDeletedSubscription(subscriptionId, callback) {
  103. DeletedSubscription.findOne(
  104. {
  105. 'subscription._id': subscriptionId,
  106. },
  107. callback
  108. )
  109. },
  110. _getUserId(userOrId) {
  111. if (userOrId && userOrId._id) {
  112. return userOrId._id
  113. } else if (userOrId) {
  114. return userOrId
  115. }
  116. },
  117. }
  118. SubscriptionLocator.promises = {
  119. getUsersSubscription: promisify(SubscriptionLocator.getUsersSubscription),
  120. getUserIndividualSubscription: promisify(
  121. SubscriptionLocator.getUserIndividualSubscription
  122. ),
  123. getManagedGroupSubscriptions: promisify(
  124. SubscriptionLocator.getManagedGroupSubscriptions
  125. ),
  126. getMemberSubscriptions: promisify(SubscriptionLocator.getMemberSubscriptions),
  127. getAdminEmail: promisify(SubscriptionLocator.getAdminEmail),
  128. getAdminEmailAndName: promisify(SubscriptionLocator.getAdminEmailAndName),
  129. getSubscription: promisify(SubscriptionLocator.getSubscription),
  130. getSubscriptionByMemberIdAndId: promisify(
  131. SubscriptionLocator.getSubscriptionByMemberIdAndId
  132. ),
  133. getGroupSubscriptionsMemberOf: promisify(
  134. SubscriptionLocator.getGroupSubscriptionsMemberOf
  135. ),
  136. getGroupsWithEmailInvite: promisify(
  137. SubscriptionLocator.getGroupsWithEmailInvite
  138. ),
  139. getGroupsWithTeamInvitesEmail: promisify(
  140. SubscriptionLocator.getGroupsWithTeamInvitesEmail
  141. ),
  142. getGroupWithV1Id: promisify(SubscriptionLocator.getGroupWithV1Id),
  143. getUserDeletedSubscriptions: promisify(
  144. SubscriptionLocator.getUserDeletedSubscriptions
  145. ),
  146. getDeletedSubscription: promisify(SubscriptionLocator.getDeletedSubscription),
  147. hasRecurlyGroupSubscription: promisify(
  148. SubscriptionLocator.hasRecurlyGroupSubscription
  149. ),
  150. }
  151. module.exports = SubscriptionLocator