diff --git a/src/services/challenges.js b/src/services/challenges.js index a7cdaf3f..3c439dba 100644 --- a/src/services/challenges.js +++ b/src/services/challenges.js @@ -450,18 +450,40 @@ class ChallengesService { return getApiResponsePayload(res); } + /** + * Get the Resource Role ID from provided Role Name + * @param {String} roleName + * @return {Promise} + */ + async getResourceRoleId(roleName) { + const params = { + name: roleName, + isActive: true, + }; + const roles = await this.private.apiV5.get(`/resource-roles?${qs.stringify(params)}`) + .then(checkErrorV5).then(res => res); + + if (_.isEmpty(roles.result)) { + throw new Error('Resource Role not found!'); + } + + return roles.result[0].id; + } + /** * Registers user to the specified challenge. * @param {String} challengeId - * @param {String} memberHandle - * @param {String} roleId * @return {Promise} */ - async register(challengeId, memberHandle, roleId) { + async register(challengeId) { + const user = decodeToken(this.private.tokenV3); + const roleId = await this.getResourceRoleId('Submitter'); const params = { - challengeId, memberHandle, roleId, + challengeId, + memberHandle: user.handle, + roleId, }; - const res = await this.private.apiV5.post('/resources', params); + const res = await this.private.apiV5.postJson('/resources', params); if (!res.ok) throw new Error(res.statusText); return res.json(); } @@ -469,13 +491,15 @@ class ChallengesService { /** * Unregisters user from the specified challenge. * @param {String} challengeId - * @param {String} memberHandle - * @param {String} roleId * @return {Promise} */ - async unregister(challengeId, memberHandle, roleId) { + async unregister(challengeId) { + const user = decodeToken(this.private.tokenV3); + const roleId = await this.getResourceRoleId('Submitter'); const params = { - challengeId, memberHandle, roleId, + challengeId, + memberHandle: user.handle, + roleId, }; const res = await this.private.apiV5.delete('/resources', params); if (!res.ok) throw new Error(res.statusText);