From 58fd1acb824498090eda81dbc28f359a9788dc40 Mon Sep 17 00:00:00 2001 From: "Luiz R. Rodrigues" Date: Sat, 23 May 2020 15:00:38 -0300 Subject: [PATCH 1/4] Updated 'resources' call to use memberId --- src/actions/members.js | 8 ++++---- src/services/challenges.js | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/actions/members.js b/src/actions/members.js index 45b9606a..fa493670 100644 --- a/src/actions/members.js +++ b/src/actions/members.js @@ -283,7 +283,7 @@ async function getUserSRMInit(handle, uuid) { * @static * @desc Create an action that loads the member SRM. * @param {String} uuid Operation UUID. - * @param {String} handle Member handle. + * @param {Number} memberId Member ID. * @param {String} tokenV3 v3 auth token. * @param {Number} start page. * @param {Number} page size. @@ -291,7 +291,7 @@ async function getUserSRMInit(handle, uuid) { * @return {Action} */ async function getUserSRMDone( - uuid, handle, tokenV3, pageNum, pageSize, + uuid, memberId, tokenV3, pageNum, pageSize, refresh, ) { const filter = { @@ -306,11 +306,11 @@ async function getUserSRMDone( }; const service = getChallengesService(tokenV3); - return service.getUserSrms(handle, params).then(res => ({ + return service.getUserSrms(memberId, params).then(res => ({ uuid, srms: res, refresh, - handle, + memberId, })); } diff --git a/src/services/challenges.js b/src/services/challenges.js index a7cdaf3f..986879f0 100644 --- a/src/services/challenges.js +++ b/src/services/challenges.js @@ -430,12 +430,12 @@ class ChallengesService { /** * Gets SRM matches related to the user. - * @param {String} handle + * @param {Number} memberId * @param {Object} params * @return {Promise} */ - async getUserSrms(handle, params) { - const challenges = await this.private.apiV5.get(`/resources?memberHandle=${handle}`); + async getUserSrms(memberId, params) { + const challenges = await this.private.apiV5.get(`/resources/${memberId}/challenges`); let newParams = params; if (challenges) { const { challengeId } = challenges[0]; From 564fd25c272737902e8ac1dc2cf7314785b2832e Mon Sep 17 00:00:00 2001 From: "Luiz R. Rodrigues" Date: Sat, 23 May 2020 16:20:43 -0300 Subject: [PATCH 2/4] getApiResponsePayload return null in case response is 200 but empty --- src/utils/tc.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/utils/tc.js b/src/utils/tc.js index 4b27c0aa..aed187ca 100644 --- a/src/utils/tc.js +++ b/src/utils/tc.js @@ -41,6 +41,9 @@ export async function getApiResponsePayload(res, shouldThrowError = true) { } } const x = (await res.json()).result; + if (!x) { + return null; + } if ((!x.success)) { if (shouldThrowError) { throw new Error(x.content); From befdfdf295fa824268ab66986f5bd44a2886c9de Mon Sep 17 00:00:00 2001 From: "Luiz R. Rodrigues" Date: Mon, 25 May 2020 15:42:43 -0300 Subject: [PATCH 3/4] Removed hardcoded challenge typeId Added getChallengeTypeId() to get challenge id by abbreviation --- src/services/challenges.js | 73 ++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/src/services/challenges.js b/src/services/challenges.js index 986879f0..8644155f 100644 --- a/src/services/challenges.js +++ b/src/services/challenges.js @@ -340,6 +340,22 @@ class ChallengesService { )); } + /** + * Get the ID from a challenge type by abbreviation + * @param {String} abbreviation + * @return {Promise} ID from first abbreviation match + */ + async getChallengeTypeId(abbreviation) { + const ret = await this.private.apiV5.get(`/challenge-types?abbreviation=${abbreviation}`) + .then(checkErrorV5).then(res => res); + + if (_.isEmpty(ret.result)) { + throw new Error('Challenge typeId not found!'); + } + + return ret.result[0].id; + } + /** * Gets possible challenge tags (technologies). * @return {Promise} Resolves to the array of tag strings. @@ -375,7 +391,17 @@ class ChallengesService { * @return {Promise} */ async getSrms(params) { - const res = await this.private.apiV5.get(`/challenges/?${qs.stringify(params)}`); + const typeId = await this.getChallengeTypeId('DEVELOP_SINGLE_ROUND_MATCH'); + if (!typeId) { + return null; + } + + const newParams = { + ...params, + typeId, + }; + + const res = await this.private.apiV5.get(`/challenges?${qs.stringify(newParams)}`); return getApiResponsePayload(res); } @@ -415,17 +441,25 @@ class ChallengesService { /** * Gets marathon matches of the specified user. - * @param {String} userId User whose challenges we want to fetch. - * @param {Object} filters Optional. - * @param {Number} params Optional. + * @param {String} memberId User whose challenges we want to fetch. + * @param {Object} params * @return {Promise} Resolves to the api response. */ - async getUserMarathonMatches(userId) { - const marathonTypeId = 'c2579605-e294-4967-b3db-875ef85240cd'; - const url = `/challenges?typeId=${marathonTypeId}&memberId=${userId}`; + async getUserMarathonMatches(memberId, params) { + const typeId = await this.getChallengeTypeId('DEVELOP_MARATHON_MATCH'); + + if (!typeId) { + return null; + } - const res = await this.private.apiV5.get(url); - return res; + const newParams = { + ...params, + typeId, + memberId, + }; + + const res = await this.private.apiV5.get(`/challenges?${qs.stringify(newParams)}`); + return getApiResponsePayload(res); } /** @@ -435,18 +469,19 @@ class ChallengesService { * @return {Promise} */ async getUserSrms(memberId, params) { - const challenges = await this.private.apiV5.get(`/resources/${memberId}/challenges`); - let newParams = params; - if (challenges) { - const { challengeId } = challenges[0]; - newParams = { - ...params, - challengeId, - }; + const typeId = await this.getChallengeTypeId('DEVELOP_SINGLE_ROUND_MATCH'); + + if (!typeId) { + return null; } - const url = `/challenges/${qs.stringify(newParams)}`; - const res = await this.private.apiV5.get(url); + const newParams = { + ...params, + typeId, + memberId, + }; + + const res = await this.private.apiV5.get(`/challenges?${qs.stringify(newParams)}`); return getApiResponsePayload(res); } From aeb69b56418b6d1926a8489202275afefade516b Mon Sep 17 00:00:00 2001 From: "Luiz R. Rodrigues" Date: Wed, 3 Jun 2020 03:15:28 -0300 Subject: [PATCH 4/4] Get SRMs via V4 API for now --- src/actions/members.js | 8 ++++---- src/services/challenges.js | 32 +++++--------------------------- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/actions/members.js b/src/actions/members.js index fa493670..45b9606a 100644 --- a/src/actions/members.js +++ b/src/actions/members.js @@ -283,7 +283,7 @@ async function getUserSRMInit(handle, uuid) { * @static * @desc Create an action that loads the member SRM. * @param {String} uuid Operation UUID. - * @param {Number} memberId Member ID. + * @param {String} handle Member handle. * @param {String} tokenV3 v3 auth token. * @param {Number} start page. * @param {Number} page size. @@ -291,7 +291,7 @@ async function getUserSRMInit(handle, uuid) { * @return {Action} */ async function getUserSRMDone( - uuid, memberId, tokenV3, pageNum, pageSize, + uuid, handle, tokenV3, pageNum, pageSize, refresh, ) { const filter = { @@ -306,11 +306,11 @@ async function getUserSRMDone( }; const service = getChallengesService(tokenV3); - return service.getUserSrms(memberId, params).then(res => ({ + return service.getUserSrms(handle, params).then(res => ({ uuid, srms: res, refresh, - memberId, + handle, })); } diff --git a/src/services/challenges.js b/src/services/challenges.js index 8644155f..c1f0acc0 100644 --- a/src/services/challenges.js +++ b/src/services/challenges.js @@ -387,21 +387,10 @@ class ChallengesService { /** * Gets SRM matches. * @param {Object} params - * @param {string} typeId Challenge SRM TypeId * @return {Promise} */ async getSrms(params) { - const typeId = await this.getChallengeTypeId('DEVELOP_SINGLE_ROUND_MATCH'); - if (!typeId) { - return null; - } - - const newParams = { - ...params, - typeId, - }; - - const res = await this.private.apiV5.get(`/challenges?${qs.stringify(newParams)}`); + const res = await this.private.api.get(`/srms/?${qs.stringify(params)}`); return getApiResponsePayload(res); } @@ -464,24 +453,13 @@ class ChallengesService { /** * Gets SRM matches related to the user. - * @param {Number} memberId + * @param {String} handle * @param {Object} params * @return {Promise} */ - async getUserSrms(memberId, params) { - const typeId = await this.getChallengeTypeId('DEVELOP_SINGLE_ROUND_MATCH'); - - if (!typeId) { - return null; - } - - const newParams = { - ...params, - typeId, - memberId, - }; - - const res = await this.private.apiV5.get(`/challenges?${qs.stringify(newParams)}`); + async getUserSrms(handle, params) { + const url = `/members/${handle}/srms/?${qs.stringify(params)}`; + const res = await this.private.api.get(url); return getApiResponsePayload(res); }