From 4f5152cb474fa3d892b53979943e3f760240c6e7 Mon Sep 17 00:00:00 2001 From: eisbilir Date: Wed, 28 Jul 2021 00:34:17 +0300 Subject: [PATCH] update: phase member details --- src/routes/phases/get.js | 18 +++++++++--------- src/routes/phases/list.js | 25 +++++++++++++------------ 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/routes/phases/get.js b/src/routes/phases/get.js index 64c34983..deb439b8 100644 --- a/src/routes/phases/get.js +++ b/src/routes/phases/get.js @@ -5,14 +5,14 @@ import util from '../../util'; import models from '../../models'; const permissions = tcMiddleware.permissions; -const populateMemberDetails = async (phase, logger, id) => { - if (phase.members && phase.members.length > 0) { - const details = await util.getMemberDetailsByUserIds(_.map(phase.members, 'userId'), logger, id); - _.forEach(phase.members, (member) => { - _.assign(member, _.find(details, detail => detail.userId === member.userId)); - }); +const populateMemberDetails = async (phase, req) => { + const members = _.map(phase.members, member => _.pick(member, 'userId')); + try { + const detailedMembers = await util.getObjectsWithMemberDetails(members, ['userId', 'handle', 'photoURL'], req); + return _.assign(phase, { members: detailedMembers }); + } catch (err) { + return _.assign(phase, { members }); } - return phase; }; module.exports = [ permissions('project.view'), @@ -60,14 +60,14 @@ module.exports = [ err.status = 404; throw err; } - return populateMemberDetails(phase.toJSON(), req.log, req.id) + return populateMemberDetails(phase.toJSON(), req) .then(result => res.json(result)); }) .catch(err => next(err)); } req.log.debug('phase found in ES'); // eslint-disable-next-line no-underscore-dangle - return populateMemberDetails(data[0].inner_hits.phases.hits.hits[0]._source, req.log, req.id) + return populateMemberDetails(data[0].inner_hits.phases.hits.hits[0]._source, req) .then(phase => res.json(phase)); }) .catch(next); diff --git a/src/routes/phases/list.js b/src/routes/phases/list.js index 7fec101c..7b76922e 100644 --- a/src/routes/phases/list.js +++ b/src/routes/phases/list.js @@ -15,17 +15,18 @@ const PHASE_ATTRIBUTES = _.keys(models.ProjectPhase.rawAttributes); const permissions = tcMiddleware.permissions; -const populateMemberDetails = async (phases, logger, id) => { - const userIds = _.reduce(phases, (acc, phase) => _.concat(acc, _.map(phase.members, 'userId')), []); - if (userIds.length > 0) { - const details = await util.getMemberDetailsByUserIds(userIds, logger, id); - _.forEach(phases, (phase) => { - _.forEach(phase.members, (member) => { - _.assign(member, _.find(details, detail => detail.userId === member.userId)); - }); - }); +const populateMemberDetails = async (phases, req) => { + let members = _.reduce(phases, (acc, phase) => + _.concat(acc, _.map(phase.members, member => _.pick(member, 'userId'))), []); + members = _.uniqBy(members, 'userId'); + try { + const detailedMembers = await util.getObjectsWithMemberDetails(members, ['userId', 'handle', 'photoURL'], req); + return _.map(phases, phase => + _.assign(phase, { members: _.intersectionBy(detailedMembers, phase.members, 'userId') })); + } catch (err) { + return _.map(phases, phase => + _.assign(phase, { members: _.map(phase.members, member => _.pick(member, 'userId')) })); } - return phases; }; module.exports = [ permissions('project.view'), @@ -70,7 +71,7 @@ module.exports = [ } phases = _.map(phases, phase => _.pick(phase, fields)); - return populateMemberDetails(phases, req.log, req.id) + return populateMemberDetails(phases, req) .then(result => res.json(result)); }) .catch((err) => { @@ -121,7 +122,7 @@ module.exports = [ } phases = _.map(phases, phase => _.pick(phase, fields)); // Write to response - return populateMemberDetails(phases, req.log, req.id) + return populateMemberDetails(phases, req) .then(result => res.json(result)); }); }