From d9e1baa1042b45099a6d8c2fef98383f592f9fa7 Mon Sep 17 00:00:00 2001 From: Sebastian Mihalache <sebastian.mihalache@gmail.con> Date: Thu, 21 Jun 2018 16:57:43 +0300 Subject: [PATCH] feat(component-manuscript-manager): create team for new fragment --- .../src/services/Fragment.js | 4 ++ .../src/services/Team.js | 23 +++++++ .../src/services/User.js | 6 ++ .../src/routes/fragments/patch.js | 60 +++++++++++++++++++ packages/xpub-faraday/config/authsome-mode.js | 2 +- 5 files changed, 94 insertions(+), 1 deletion(-) diff --git a/packages/component-helper-service/src/services/Fragment.js b/packages/component-helper-service/src/services/Fragment.js index 078aa44fa..d41e1c456 100644 --- a/packages/component-helper-service/src/services/Fragment.js +++ b/packages/component-helper-service/src/services/Fragment.js @@ -5,6 +5,10 @@ class Fragment { this.fragment = fragment } + set _fragment(newFragment) { + this.fragment = newFragment + } + async getFragmentData({ handlingEditor = {} }) { const { fragment: { metadata = {}, recommendations = [], id } } = this const heRecommendation = recommendations.find( diff --git a/packages/component-helper-service/src/services/Team.js b/packages/component-helper-service/src/services/Team.js index 9d8d6148a..9679b4854 100644 --- a/packages/component-helper-service/src/services/Team.js +++ b/packages/component-helper-service/src/services/Team.js @@ -136,6 +136,29 @@ class Team { await user.save() await collection.save() } + + createOrUpdateTeamForNewVersion({ role, iterable }) { + iterable.forEach(async obj => { + let { userId } = obj + if (role === 'author') { + userId = obj.id + } + let team = await this.getTeam({ + role, + objectType: 'fragment', + }) + if (team) { + team.members.push(userId) + team.save() + } else { + team = this.createTeam({ + role, + userId, + objectType: 'fragment', + }) + } + }) + } } module.exports = Team diff --git a/packages/component-helper-service/src/services/User.js b/packages/component-helper-service/src/services/User.js index 7d9d3e520..d165dae7e 100644 --- a/packages/component-helper-service/src/services/User.js +++ b/packages/component-helper-service/src/services/User.js @@ -61,6 +61,12 @@ class User { const eic = users.find(user => user.editorInChief || user.admin) return eic } + + async updateUserTeams({ userId, teamId }) { + const user = await this.UserModel.find(userId) + user.teams.push(teamId) + user.save() + } } module.exports = User diff --git a/packages/component-manuscript-manager/src/routes/fragments/patch.js b/packages/component-manuscript-manager/src/routes/fragments/patch.js index 2dfa426ea..3edf6c601 100644 --- a/packages/component-manuscript-manager/src/routes/fragments/patch.js +++ b/packages/component-manuscript-manager/src/routes/fragments/patch.js @@ -1,4 +1,6 @@ const { + Team, + User, services, Fragment, Collection, @@ -30,6 +32,64 @@ module.exports = models => async (req, res) => { const collectionHelper = new Collection({ collection }) const fragmentHelper = new Fragment({ fragment }) + const teamHelper = new Team({ + TeamModel: models.Team, + collectionId, + fragmentId, + }) + + fragment.authors = fragment.authors || [] + teamHelper.createOrUpdateTeamForNewVersion({ + role: 'author', + iterable: fragment.authors, + }) + + const authorsTeam = await teamHelper.getTeam({ + role: 'author', + objectType: 'fragment', + }) + + const userHelper = new User({ UserModel: models.User }) + if (authorsTeam) { + fragment.authors.forEach(author => { + userHelper.updateUserTeams({ + userId: author.id, + teamId: authorsTeam.id, + }) + }) + } + + fragment.invitations = fragment.invitations || [] + teamHelper.createOrUpdateTeamForNewVersion({ + role: 'reviewer', + iterable: fragment.invitations, + }) + + const reviewersTeam = await teamHelper.getTeam({ + role: 'reviewer', + objectType: 'fragment', + }) + + if (reviewersTeam) { + fragment.invitations.forEach(inv => { + userHelper.updateUserTeams({ + userId: inv.userId, + teamId: reviewersTeam.id, + }) + }) + } + + const fragLength = collection.fragments.length + if (fragLength < 2) { + return res.status(400).json({ + error: 'No previous version has been found.', + }) + } + + const previousFragment = await models.Fragment.find( + collection.fragments[fragLength - 2], + ) + fragmentHelper.fragment = previousFragment const heRecommendation = fragmentHelper.getHeRequestToRevision() if (!heRecommendation) { diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js index 65787b60b..2a2aa6ad7 100644 --- a/packages/xpub-faraday/config/authsome-mode.js +++ b/packages/xpub-faraday/config/authsome-mode.js @@ -278,7 +278,7 @@ const authsomeMode = async (userId, operation, object, context) => { const user = await context.models.User.find(userId) // Admins and editor in chiefs can do anything - // if (user && (user.admin || user.editorInChief)) return true + if (user && (user.admin || user.editorInChief)) return true if (user) { return authenticatedUser(user, operation, object, context) -- GitLab