From ee96d89f66c9b3015a0ebff64eedb19a922f86f0 Mon Sep 17 00:00:00 2001 From: M Fikri A Date: Wed, 17 Mar 2021 13:56:26 +0700 Subject: [PATCH 1/3] Split GroupIDs By Several Chunks --- src/actions/members.js | 2 +- src/actions/profile.js | 2 +- src/services/members.js | 27 ++++++++++++++++++++------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/actions/members.js b/src/actions/members.js index 817ad5be..b1bbcbac 100644 --- a/src/actions/members.js +++ b/src/actions/members.js @@ -114,7 +114,7 @@ async function getStatsInit(handle, uuid) { * @static * @desc Create an action that loads member statistics. * @param {String} handle Member handle. - * @param {String} groupIds Group ids. + * @param {Array|String} groupIds Group ids. * @param {String} uuid Operation UUID. * @param {String} tokenV3 v3 auth token. * @return {Action} diff --git a/src/actions/profile.js b/src/actions/profile.js index 5bcb4da6..f04f31f6 100644 --- a/src/actions/profile.js +++ b/src/actions/profile.js @@ -132,7 +132,7 @@ function getStatsInit() {} * @static * @desc Creates an action that loads member's stats. * @param {String} handle Member handle. - * @param {String} groupIds Group ids. + * @param {Array|String} groupIds Group ids. * @return {Action} */ function getStatsDone(handle, groupIds) { diff --git a/src/services/members.js b/src/services/members.js index d1cd5b09..47b1aa05 100644 --- a/src/services/members.js +++ b/src/services/members.js @@ -83,17 +83,30 @@ class MembersService { /** * Gets member statistics. * @param {String} handle - * @param {String} groupIds + * @param {Array|String} groupIds * @return {Promise} Resolves to the stats object. */ async getStats(handle, groupIds) { - let res; - if (groupIds) { - res = await this.private.api.get(`/members/${handle}/stats?groupIds=${groupIds}`); - } else { - res = await this.private.api.get(`/members/${handle}/stats`); + if (!groupIds) { + const res = await this.private.api.get(`/members/${handle}/stats`); + return getApiResponsePayload(res); } - return getApiResponsePayload(res); + + const groupIdsArray = _.isArray(groupIds) ? groupIds : _.split(groupIds, ','); + const groupIdChunks = _.chunk(groupIdsArray, 50); + + const getStatRequests = _.map(groupIdChunks, async groupIdChunk => { + const res = await this.private.api.get(`/members/${handle}/stats?groupIds=${_.join(groupIdChunk)}`); + return getApiResponsePayload(res, false); + }); + const results = await Promise.all(getStatRequests); + + return _.flatten( + _.uniqBy( + _.filter(results, _.isArray), + item => item.groupId + ) + ); } /** From 79c911724f0ab1c1fc3048c3fd278b0a678f3c57 Mon Sep 17 00:00:00 2001 From: M Fikri A Date: Wed, 17 Mar 2021 14:03:57 +0700 Subject: [PATCH 2/3] Prevent Duplicate Items --- src/services/members.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/services/members.js b/src/services/members.js index 47b1aa05..34a48f54 100644 --- a/src/services/members.js +++ b/src/services/members.js @@ -101,11 +101,11 @@ class MembersService { }); const results = await Promise.all(getStatRequests); - return _.flatten( - _.uniqBy( - _.filter(results, _.isArray), - item => item.groupId - ) + return _.uniqBy( + _.flatten( + _.filter(results, _.isArray) + ), + item => item.groupId ); } From e54c54e8bc6c7f9b8adebe0ced7cb73b9cb9b035 Mon Sep 17 00:00:00 2001 From: M Fikri A Date: Wed, 17 Mar 2021 15:44:32 +0700 Subject: [PATCH 3/3] Fix Lint --- src/services/members.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/members.js b/src/services/members.js index 34a48f54..14cf932c 100644 --- a/src/services/members.js +++ b/src/services/members.js @@ -95,7 +95,7 @@ class MembersService { const groupIdsArray = _.isArray(groupIds) ? groupIds : _.split(groupIds, ','); const groupIdChunks = _.chunk(groupIdsArray, 50); - const getStatRequests = _.map(groupIdChunks, async groupIdChunk => { + const getStatRequests = _.map(groupIdChunks, async (groupIdChunk) => { const res = await this.private.api.get(`/members/${handle}/stats?groupIds=${_.join(groupIdChunk)}`); return getApiResponsePayload(res, false); }); @@ -103,9 +103,9 @@ class MembersService { return _.uniqBy( _.flatten( - _.filter(results, _.isArray) + _.filter(results, _.isArray), ), - item => item.groupId + item => item.groupId, ); }