From df96bdf5aed1673c69c6cf535c98bfc9daf4837b Mon Sep 17 00:00:00 2001 From: Sebastian <sebastian.mihalache@thinslices.com> Date: Tue, 20 Mar 2018 08:16:11 +0200 Subject: [PATCH] feat(component-invite): add HE global role --- .../src/controllers/assignCollectionRole.js | 15 +++++++++++---- packages/component-invite/src/helpers/Team.js | 11 +++++++++++ packages/component-invite/src/helpers/helpers.js | 1 + .../component-invite/src/routes/postInvite.js | 3 +-- packages/xpub-faraday/config/default.js | 4 ++-- packages/xpub-faraday/config/validations.js | 1 + 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/packages/component-invite/src/controllers/assignCollectionRole.js b/packages/component-invite/src/controllers/assignCollectionRole.js index 2dc689846..36a16362f 100644 --- a/packages/component-invite/src/controllers/assignCollectionRole.js +++ b/packages/component-invite/src/controllers/assignCollectionRole.js @@ -63,12 +63,19 @@ module.exports = async ( try { let user = await models.User.findByEmail(email) - const team = await teamHelper.setupManuscriptTeam( - models, - user, + let team = teamHelper.getTeamByGroupAndCollection( collectionId, role, + models.Team, ) + if (team === undefined) { + team = await teamHelper.setupManuscriptTeam( + models, + user, + collectionId, + role, + ) + } // getting the updated user from the DB - creating a team also updates the user user = await models.User.findByEmail(email) @@ -84,7 +91,7 @@ module.exports = async ( return res.status(200).json(user) } catch (e) { logger.error(e) - return res.status(500).json({ error: 'Mailing could not be sent.' }) + return res.status(500).json({ error: 'Mail could not be sent.' }) } } catch (e) { const notFoundError = await helpers.handleNotFoundError(e, 'user') diff --git a/packages/component-invite/src/helpers/Team.js b/packages/component-invite/src/helpers/Team.js index 553b4cd75..ae6758c96 100644 --- a/packages/component-invite/src/helpers/Team.js +++ b/packages/component-invite/src/helpers/Team.js @@ -166,6 +166,16 @@ const getInviteData = (invitations, collectionId, role) => { return { timestamp, status } } +const getTeamByGroupAndCollection = async (collectionId, role, TeamModel) => { + const teams = await TeamModel.all() + return teams.find( + team => + team.group === role && + team.object.type === 'collection' && + team.object.id === collectionId, + ) +} + module.exports = { createNewTeam, setupEiCTeams, @@ -175,4 +185,5 @@ module.exports = { removeTeamMember, getTeamMembersByCollection, getInviteData, + getTeamByGroupAndCollection, } diff --git a/packages/component-invite/src/helpers/helpers.js b/packages/component-invite/src/helpers/helpers.js index b57511878..2ec5f5f9f 100644 --- a/packages/component-invite/src/helpers/helpers.js +++ b/packages/component-invite/src/helpers/helpers.js @@ -96,6 +96,7 @@ const createNewUser = async ( title, editorInChief: role === 'editorInChief', admin: role === 'admin', + handlingEditor: role === 'handlingEditor', } let newUser = new UserModel(userBody) try { diff --git a/packages/component-invite/src/routes/postInvite.js b/packages/component-invite/src/routes/postInvite.js index 6c8d4de3a..c0f7b4aff 100644 --- a/packages/component-invite/src/routes/postInvite.js +++ b/packages/component-invite/src/routes/postInvite.js @@ -30,7 +30,7 @@ module.exports = models => async (req, res) => { const collectionId = get(req, 'params.collectionId') const url = `${req.protocol}://${req.get('host')}` - if (collectionId) { + if (collectionId) return require('../controllers/assignCollectionRole')( email, role, @@ -40,7 +40,6 @@ module.exports = models => async (req, res) => { models, url, ) - } if (reqUser.admin) return require('../controllers/inviteGlobalRole')( diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js index f8a4b92db..db5c012a2 100644 --- a/packages/xpub-faraday/config/default.js +++ b/packages/xpub-faraday/config/default.js @@ -48,10 +48,10 @@ module.exports = { url: process.env.PUBSWEET_INVITE_PASSWORD_RESET_URL || '/invite', }, roles: { - global: ['admin', 'editorInChief', 'author'], + global: ['admin', 'editorInChief', 'author', 'handlingEditor'], collection: ['handlingEditor', 'reviewer'], inviteRights: { - admin: ['admin', 'editorInChief', 'author'], + admin: ['admin', 'editorInChief', 'author', 'handlingEditor'], editorInChief: ['handlingEditor'], handlingEditor: ['reviewer'], }, diff --git a/packages/xpub-faraday/config/validations.js b/packages/xpub-faraday/config/validations.js index 1ed3e06f9..550c6caa6 100644 --- a/packages/xpub-faraday/config/validations.js +++ b/packages/xpub-faraday/config/validations.js @@ -97,6 +97,7 @@ module.exports = { invitations: Joi.array(), teams: Joi.array(), editorInChief: Joi.boolean(), + handlingEditor: Joi.boolean(), }, team: { group: Joi.string(), -- GitLab