diff --git a/src/server/services/mmLeaderboard.js b/src/server/services/mmLeaderboard.js index c6c7118ace..b3d812ec75 100644 --- a/src/server/services/mmLeaderboard.js +++ b/src/server/services/mmLeaderboard.js @@ -4,7 +4,7 @@ */ import { services } from 'topcoder-react-lib'; -const { api } = services; +const { api, submissions } = services; /** * Auxiliary class that handles communication with MMLeaderboard @@ -18,11 +18,14 @@ export default class MMLService { async getLeaderboard(req, res, next) { try { const m2mToken = await api.getTcM2mToken(); + const subSrv = submissions.getService(m2mToken); + const reviewIds = await subSrv.getScanReviewIds(); const v5api = api.getApiV5(m2mToken); const subs = await v5api.get(`/submissions?challengeId=${req.params.id}&page=1&perPage=500`); return res.send({ id: req.params.id, subs: await subs.json(), + reviewIds, }); } catch (err) { return next(err); diff --git a/src/shared/actions/mmLeaderboard.js b/src/shared/actions/mmLeaderboard.js index 59159a589a..4f838d4126 100644 --- a/src/shared/actions/mmLeaderboard.js +++ b/src/shared/actions/mmLeaderboard.js @@ -19,7 +19,13 @@ async function getMMLeaderboardDone(id) { if (res) { const groupedData = _.groupBy(res.subs, 'createdBy'); _.each(groupedData, (subs, handle) => { - const sortedSubs = _.orderBy(subs, ['updated'], ['desc']); + // filter member subs from reviewIds + const filteredSubs = _.map(subs, (sub) => { + // eslint-disable-next-line no-param-reassign + sub.review = _.filter(sub.review, r => res.reviewIds.indexOf(r.typeId) === -1); + return sub; + }); + const sortedSubs = _.orderBy(filteredSubs, ['updated'], ['desc']); const scores = _.orderBy(_.compact(sortedSubs[0].review), ['updated'], ['desc']); data.push({ createdBy: handle, @@ -28,7 +34,7 @@ async function getMMLeaderboardDone(id) { score: scores && scores.length ? scores[0].score : '...', }); }); - data = _.orderBy(data, ['score', 'updated'], ['desc']).map((r, i) => ({ + data = _.orderBy(data, [d => (Number(d.score) ? Number(d.score) : 0)], ['desc']).map((r, i) => ({ ...r, rank: i + 1, score: r.score % 1 ? Number(r.score).toFixed(5) : r.score,