From 2c4677fcdce99e13d429c8cae46dbc9d7f7715f1 Mon Sep 17 00:00:00 2001 From: Mihail Hagiu <mihail.hagiu@thinslices.com> Date: Wed, 14 Nov 2018 18:02:06 +0200 Subject: [PATCH] fix(ReviewerNumbering): Moved getReviewerNumber logic on component-helper-service (WIP) --- .../src/services/Collection.js | 56 +++++++++++++++++++ .../routes/fragmentsRecommendations/post.js | 53 +++--------------- 2 files changed, 64 insertions(+), 45 deletions(-) diff --git a/packages/component-helper-service/src/services/Collection.js b/packages/component-helper-service/src/services/Collection.js index d4a4310b2..76cea5e62 100644 --- a/packages/component-helper-service/src/services/Collection.js +++ b/packages/component-helper-service/src/services/Collection.js @@ -1,3 +1,5 @@ +const { flatten, isEmpty, maxBy, get } = require('lodash') + class Collection { constructor({ collection = {} }) { this.collection = collection @@ -103,6 +105,60 @@ class Collection { const [firstName, lastName] = this.collection.handlingEditor.name.split(' ') return lastName || firstName } + + async getAllCollectionFragments({ FragmentModel }) { + const allCollectionFragments = await Promise.all( + this.collection.fragments.map(async fragmentId => { + const fragment = await FragmentModel.find(fragmentId) + return fragment + }), + ) + return allCollectionFragments + } + + async getAllCollectionInvitations({ FragmentModel }) { + const allCollectionFragments = await this.getAllCollectionFragments({ + FragmentModel, + }) + const allCollectionInvitations = flatten( + allCollectionFragments.map(fragment => fragment.invitations), + ) + return allCollectionInvitations + } + + async getAllNumberedInvitationsForUser({ reqUser, FragmentModel }) { + const allCollectionInvitations = await this.getAllCollectionInvitations({ + FragmentModel, + }) + return allCollectionInvitations + .filter(invite => invite.userId === reqUser.id) + .filter(invite => invite.reviewerNumber) + } + + async getMaxReviewerNumber({ FragmentModel }) { + const allCollectionInvitations = await this.getAllCollectionInvitations({ + FragmentModel, + }) + const maxReviewerNumber = get( + maxBy(allCollectionInvitations, 'reviewerNumber'), + 'reviewerNumber', + 0, + ) + return maxReviewerNumber + } + + async getReviewerNumber({ reqUser, FragmentModel }) { + // maybe i should get fragments here and pass them further + const allNumberedInvitationsForUser = await this.getAllNumberedInvitationsForUser( + { + reqUser, + FragmentModel, + }, + ) + if (isEmpty(allNumberedInvitationsForUser)) + return this.getMaxReviewerNumber() + 1 + return allNumberedInvitationsForUser[0].reviewerNumber + } } module.exports = Collection diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js index bc186e353..922f7c700 100644 --- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js +++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js @@ -1,15 +1,5 @@ const uuid = require('uuid') -const { - pick, - get, - set, - has, - isEmpty, - last, - findIndex, - maxBy, - flatten, -} = require('lodash') +const { pick, get, set, has, isEmpty, last, findIndex } = require('lodash') const config = require('config') const { v4 } = require('uuid') @@ -42,31 +32,6 @@ const sendMTSPackage = async (collection, fragment, isEQA = false) => { const Notification = require('../../notifications/notification') -const getReviewerNumber = async ({ collection, fragment, models, reqUser }) => { - const allCollectionFragments = await Promise.all( - collection.fragments.map(async fragmentId => { - const fragment = await models.Fragment.find(fragmentId) - return fragment - }), - ) - const allCollectionInvitations = flatten( - allCollectionFragments.map(fragment => fragment.invitations), - ) - const allNumberedUserInvitations = allCollectionInvitations - .filter(invite => invite.userId === reqUser.id) - .filter(invite => invite.reviewerNumber) - - if (!isEmpty(allNumberedUserInvitations)) - return allNumberedUserInvitations[0].reviewerNumber - - const maxReviewerNumber = get( - maxBy(allCollectionInvitations, 'reviewerNumber'), - 'reviewerNumber', - 0, - ) - return maxReviewerNumber + 1 -} - module.exports = models => async (req, res) => { const { recommendation, comments, recommendationType } = req.body if (!services.checkForUndefinedParams(recommendationType)) @@ -148,9 +113,8 @@ module.exports = models => async (req, res) => { newRecommendation.recommendation = recommendation || undefined newRecommendation.comments = comments || undefined + const collectionHelper = new Collection({ collection }) if (recommendationType === 'editorRecommendation') { - const collectionHelper = new Collection({ collection }) - collectionHelper.updateStatusOnRecommendation({ isEditorInChief, recommendation, @@ -237,15 +201,14 @@ module.exports = models => async (req, res) => { 'userId', reqUser.id, ]) - if (invitationIndex >= 0) - fragment.invitations[ - invitationIndex - ].reviewerNumber = await getReviewerNumber({ - collection, - fragment, - models, + if (invitationIndex >= 0) { + const FragmentModel = models.Fragment + const reviewerNumber = await collectionHelper.getReviewerNumber({ reqUser, + FragmentModel, }) + fragment.invitations[invitationIndex].reviewerNumber = reviewerNumber + } fragment.recommendations.push(newRecommendation) fragment.save() -- GitLab