diff --git a/packages/component-helper-service/src/services/Email.js b/packages/component-helper-service/src/services/Email.js index f9e4568676501759810a37045a32b1cf05e303d3..e201739d7c36de4f50dd5f12903efb2679338ed1 100644 --- a/packages/component-helper-service/src/services/Email.js +++ b/packages/component-helper-service/src/services/Email.js @@ -65,8 +65,8 @@ class Email { ? `${eic.firstName} ${eic.lastName}` : collection.handlingEditor.name - let reviewers = await Promise.all(reviewerPromises) - reviewers = reviewers.filter(Boolean) + let reviewers = (await Promise.all(reviewerPromises)).filter(Boolean) + reviewers = reviewers.filter(rev => rev.isActive) if (agree) { subject = isSubmitted @@ -118,26 +118,25 @@ class Email { parsedFragment: { title }, authors: { submittingAuthor: { firstName = '', lastName = '' } }, } = this - const reviewers = await Promise.all( - invitations.map(async inv => UserModel.find(inv.userId)), - ) - reviewers.forEach(user => - mailService.sendNotificationEmail({ - emailType: 'submitting-reviewers-after-revision', - toEmail: user.email, - meta: { - baseUrl, - collection, - timestamp: Date.now(), - reviewerName: `${user.firstName} ${user.lastName}`, - fragment: { - title, - authorName: `${firstName} ${lastName}`, - id: newFragmentId, + ;(await Promise.all(invitations.map(inv => UserModel.find(inv.userId)))) + .filter(rev => rev.isActive) + .forEach(user => + mailService.sendNotificationEmail({ + emailType: 'submitting-reviewers-after-revision', + toEmail: user.email, + meta: { + baseUrl, + collection, + timestamp: Date.now(), + reviewerName: `${user.firstName} ${user.lastName}`, + fragment: { + title, + authorName: `${firstName} ${lastName}`, + id: newFragmentId, + }, }, - }, - }), - ) + }), + ) } async setupAuthorsEmail({ @@ -147,6 +146,7 @@ class Email { }) { const { baseUrl, + UserModel, collection, parsedFragment: { heRecommendation, id, title, newComments }, authors: { submittingAuthor: { email, firstName, lastName } }, @@ -170,7 +170,10 @@ class Email { ] } else { const fragment = await FragmentModel.find(id) - toAuthors = fragment.authors.map(author => ({ + const userHelper = new User({ UserModel }) + const activeAuthors = userHelper.getActiveAuthors(fragment.authors) + + toAuthors = activeAuthors.map(author => ({ email: author.email, name: `${author.firstName} ${author.lastName}`, })) diff --git a/packages/component-helper-service/src/services/Fragment.js b/packages/component-helper-service/src/services/Fragment.js index e1e421278c082e1f321af85ff122c3d3a97d92d3..6d846b693d4993dbf2b15df7421d93bb043258b5 100644 --- a/packages/component-helper-service/src/services/Fragment.js +++ b/packages/component-helper-service/src/services/Fragment.js @@ -1,4 +1,5 @@ const get = require('lodash/get') +const User = require('./User') class Fragment { constructor({ fragment }) { @@ -69,11 +70,12 @@ class Fragment { get(submittingAuthorData, 'id'), ) - const authorsPromises = authors.map(async author => { - const user = await UserModel.find(author.id) - return `${user.firstName} ${user.lastName}` - }) - const authorsList = await Promise.all(authorsPromises) + const userHelper = new User({ UserModel }) + const activeAuthors = userHelper.getActiveAuthors(authors) + + const authorsList = activeAuthors.map( + author => `${author.firstName} ${author.lastName}`, + ) return { authorsList, diff --git a/packages/component-helper-service/src/services/User.js b/packages/component-helper-service/src/services/User.js index 17ce529f03266c44cb1f89116912246bb4d8b26f..97821f164f7fe0af918f88c97c28c7163024721a 100644 --- a/packages/component-helper-service/src/services/User.js +++ b/packages/component-helper-service/src/services/User.js @@ -68,6 +68,16 @@ class User { user.teams.push(teamId) user.save() } + + async getActiveAuthors(authors) { + const activeUsers = (await Promise.all( + authors.map(author => this.UserModel.find(author.id)), + )) + .filter(u => u.isActive) + .map(u => u.id) + + return authors.filter(author => activeUsers.includes(author.id)) + } } module.exports = User diff --git a/packages/component-user-manager/src/routes/fragmentsUsers/get.js b/packages/component-user-manager/src/routes/fragmentsUsers/get.js index 7be10dc0fe07e5925c5ca3921d49433d1bb86184..ebb0cd045ac5b5a9a4348b6c288e642aff29473d 100644 --- a/packages/component-user-manager/src/routes/fragmentsUsers/get.js +++ b/packages/component-user-manager/src/routes/fragmentsUsers/get.js @@ -1,4 +1,4 @@ -const { services } = require('pubsweet-component-helper-service') +const { services, User } = require('pubsweet-component-helper-service') module.exports = models => async (req, res) => { // TO DO: add authsome @@ -11,15 +11,8 @@ module.exports = models => async (req, res) => { }) const { authors = [] } = await models.Fragment.find(fragmentId) - const activeUsers = (await Promise.all( - authors.map(author => models.User.find(author.id)), - )) - .filter(u => u.isActive) - .map(u => u.id) - - const activeAuthors = authors.filter(author => - activeUsers.includes(author.id), - ) + const userHelper = new User({ UserModel: models.User }) + const activeAuthors = userHelper.getActiveAuthors(authors) return res.status(200).json(activeAuthors) } catch (e) { diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js index 8c3734151c18eeb7bcf4c504518791e255ddba01..a585fc37f507aefb0cc15b3d0913f106c90d7573 100644 --- a/packages/xpub-faraday/config/authsome-mode.js +++ b/packages/xpub-faraday/config/authsome-mode.js @@ -296,8 +296,7 @@ const authsomeMode = async (userId, operation, object, context) => { return applyEditorInChiefPolicy(user, operation, object, context) } - if (user) { - if (!user.isActive) return false + if (user && user.isActive !== false) { return applyAuthenticatedUserPolicy(user, operation, object, context) }