UserMembershipsHandler.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* eslint-disable
  2. node/handle-callback-err,
  3. max-len,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS102: Remove unnecessary code created because of implicit returns
  10. * DS207: Consider shorter variations of null checks
  11. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  12. */
  13. const async = require('async')
  14. const { promisifyAll } = require('../../util/promises')
  15. const EntityModels = {
  16. Institution: require('../../models/Institution').Institution,
  17. Subscription: require('../../models/Subscription').Subscription,
  18. Publisher: require('../../models/Publisher').Publisher
  19. }
  20. const UserMembershipEntityConfigs = require('./UserMembershipEntityConfigs')
  21. const UserMembershipsHandler = {
  22. removeUserFromAllEntities(userId, callback) {
  23. // get all writable entity types
  24. if (callback == null) {
  25. callback = function(error) {}
  26. }
  27. const entityConfigs = []
  28. for (let key in UserMembershipEntityConfigs) {
  29. const entityConfig = UserMembershipEntityConfigs[key]
  30. if (entityConfig.fields && entityConfig.fields.write != null) {
  31. entityConfigs.push(entityConfig)
  32. }
  33. }
  34. // remove the user from all entities types
  35. return async.map(
  36. entityConfigs,
  37. (entityConfig, innerCallback) =>
  38. UserMembershipsHandler.removeUserFromEntities(
  39. entityConfig,
  40. userId,
  41. innerCallback
  42. ),
  43. callback
  44. )
  45. },
  46. removeUserFromEntities(entityConfig, userId, callback) {
  47. if (callback == null) {
  48. callback = function(error) {}
  49. }
  50. const removeOperation = { $pull: {} }
  51. removeOperation.$pull[entityConfig.fields.write] = userId
  52. return EntityModels[entityConfig.modelName].updateMany(
  53. {},
  54. removeOperation,
  55. callback
  56. )
  57. },
  58. getEntitiesByUser(entityConfig, userId, callback) {
  59. if (callback == null) {
  60. callback = function(error, entities) {}
  61. }
  62. const query = Object.assign({}, entityConfig.baseQuery)
  63. query[entityConfig.fields.access] = userId
  64. return EntityModels[entityConfig.modelName].find(query, function(
  65. error,
  66. entities
  67. ) {
  68. if (entities == null) {
  69. entities = []
  70. }
  71. if (error != null) {
  72. return callback(error)
  73. }
  74. return async.mapSeries(
  75. entities,
  76. (entity, cb) => entity.fetchV1Data(cb),
  77. callback
  78. )
  79. })
  80. }
  81. }
  82. UserMembershipsHandler.promises = promisifyAll(UserMembershipsHandler)
  83. module.exports = UserMembershipsHandler