Advertisement
Guest User

Untitled

a guest
Jul 24th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. const _deleteOneToOneRooms = function(userId, teamMembers) {
  2. return function() {
  3. return User.findOne({ _id: userId })
  4. .then((userDeleted) => {
  5. return Promise.all(teamMembers.map((member) => {
  6. return User.findOne({ _id: member }).then((user) => {
  7. return {
  8. id: user._id,
  9. commonTeams: Utils.arrayIntersect(user.teams, userDeleted.teams).length !== 0
  10. };
  11. });
  12. }))
  13. .then((usersNoCommonTeam) => {
  14. return Promise.all(usersNoCommonTeam.map((user) => {
  15. if(user.commonTeams) {
  16. return Promise.resolve();
  17. }
  18. return Room.findOneAndRemove(
  19. {
  20. $and: [
  21. { type: 'one-to-one' },
  22. { owners: { $all: [user.id, userDeleted] } }
  23. ]
  24. });
  25. }));
  26. });
  27. })
  28. .then((roomsToDelete) => {
  29. return Promise.all(roomsToDelete.map((room) => {
  30. if(room) {
  31. return Membership.remove({ room: room._id });
  32. }
  33. return Promise.resolve();
  34. }));
  35. });
  36. };
  37. };
  38.  
  39. someDatabaseLookups.then(_deleteOneToOneRooms(userId, teamMembers))
  40.  
  41. const _deleteOneToOneRooms = function(userId, teamMembers) {
  42. return function() {
  43. return User.findOne({ _id: userId })
  44. .then((deletedUser) => {
  45. return _getUsersWithNoCommonTeams(deletedUser, teamMembers);
  46. })
  47. .then((usersNoCommonTeam) => {
  48. return _getOneToOneRooms(userId, usersNoCommonTeam);
  49. })
  50. .then(_removeRooms);
  51. };
  52. };
  53.  
  54. const _deleteOneToOneRooms = function(userId, teamMembers) {
  55. return async function() {
  56. let deletedUser = await User.findOne({ _id: userId });
  57. let usersNoCommonTeam = await _getUsersWithNoCommonTeams(deletedUser, teamMembers);
  58. return await _getOneToOneRooms(userId, usersNoCommonTeam);
  59. };
  60. };
  61.  
  62. return Promise.all(teamMemberIds.map(teamMemberId => {
  63. return User.findOne({ _id: teamMemberId }).then(user => ({
  64. id: user._id,
  65. commonTeams: Utils.arrayIntersect(user.teams, deletedUser.teams).length !== 0
  66. }))
  67. })
  68.  
  69. return Promise.all(teamMembers.map(teamMember => {
  70. return teamMember.commonTeams ? Promise.resolve() : Room.findOneAndRemove({
  71. $and: [
  72. { type: 'one-to-one' },
  73. { owners: { $all: [teamMember.id, deletedUser] } }
  74. ]
  75. })
  76. })
  77.  
  78. return Promise.all(roomsToDelete.map(room => {
  79. return room ? Membership.remove({ room: room._id }) : Promise.resolve()
  80. }))
  81.  
  82. const _deleteOneToOneRooms = function (userId, teamMemberIds) {
  83. return User.findOne({ _id: userId }).then(deletedUser => {
  84. return Promise.all(teamMemberIds.map(teamMemberId => {
  85. return User.findOne({ _id: teamMemberId }).then(user => ({
  86. id: user._id,
  87. commonTeams: Utils.arrayIntersect(user.teams, deletedUser.teams).length !== 0
  88. }))
  89. })).then((teamMembers) => {
  90. return Promise.all(teamMembers.map(teamMember => {
  91. return teamMember.commonTeams ? Promise.resolve() : Room.findOneAndRemove({
  92. $and: [
  93. { type: 'one-to-one' },
  94. { owners: { $all: [teamMember.id, deletedUser] } }
  95. ]
  96. })
  97. }))
  98. })
  99. }).then(roomsToDelete => {
  100. return Promise.all(roomsToDelete.map(roomToDelete => {
  101. return roomToDelete ? Membership.remove({ room: roomToDelete._id }) : Promise.resolve()
  102. }))
  103. })
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement