SubscriptionGroupHandler.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const { callbackify } = require('util')
  2. const SubscriptionUpdater = require('./SubscriptionUpdater')
  3. const SubscriptionLocator = require('./SubscriptionLocator')
  4. const { Subscription } = require('../../models/Subscription')
  5. async function removeUserFromGroup(subscriptionId, userIdToRemove) {
  6. await SubscriptionUpdater.promises.removeUserFromGroup(
  7. subscriptionId,
  8. userIdToRemove
  9. )
  10. }
  11. async function replaceUserReferencesInGroups(oldId, newId) {
  12. await Subscription.updateOne({ admin_id: oldId }, { admin_id: newId }).exec()
  13. await _replaceInArray(Subscription, 'manager_ids', oldId, newId)
  14. await _replaceInArray(Subscription, 'member_ids', oldId, newId)
  15. }
  16. async function isUserPartOfGroup(userId, subscriptionId) {
  17. const subscription =
  18. await SubscriptionLocator.promises.getSubscriptionByMemberIdAndId(
  19. userId,
  20. subscriptionId
  21. )
  22. return !!subscription
  23. }
  24. async function getTotalConfirmedUsersInGroup(subscriptionId) {
  25. const subscription =
  26. await SubscriptionLocator.promises.getSubscription(subscriptionId)
  27. return subscription?.member_ids?.length
  28. }
  29. async function _replaceInArray(model, property, oldValue, newValue) {
  30. // Mongo won't let us pull and addToSet in the same query, so do it in
  31. // two. Note we need to add first, since the query is based on the old user.
  32. const query = {}
  33. query[property] = oldValue
  34. const setNewValue = {}
  35. setNewValue[property] = newValue
  36. const setOldValue = {}
  37. setOldValue[property] = oldValue
  38. await model.updateMany(query, { $addToSet: setNewValue })
  39. await model.updateMany(query, { $pull: setOldValue })
  40. }
  41. module.exports = {
  42. removeUserFromGroup: callbackify(removeUserFromGroup),
  43. replaceUserReferencesInGroups: callbackify(replaceUserReferencesInGroups),
  44. getTotalConfirmedUsersInGroup: callbackify(getTotalConfirmedUsersInGroup),
  45. isUserPartOfGroup: callbackify(isUserPartOfGroup),
  46. promises: {
  47. removeUserFromGroup,
  48. replaceUserReferencesInGroups,
  49. getTotalConfirmedUsersInGroup,
  50. isUserPartOfGroup,
  51. },
  52. }