From 39c54718fcf8feb929c5b835e079a5c44036cf6f Mon Sep 17 00:00:00 2001 From: Thomas Kranitsas Date: Thu, 17 Dec 2020 17:48:05 +0200 Subject: [PATCH] lock deletion of resources after the challenge is completed --- app-constants.js | 7 ++++++- src/services/ResourceService.js | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app-constants.js b/app-constants.js index e6eb8b4..3db24e1 100644 --- a/app-constants.js +++ b/app-constants.js @@ -9,6 +9,11 @@ const UserRoles = { User: 'Topcoder User' } +const ChallengeStatuses = { + Completed: 'Completed' +} + module.exports = { - UserRoles + UserRoles, + ChallengeStatuses } diff --git a/src/services/ResourceService.js b/src/services/ResourceService.js index 6132977..e7f220b 100644 --- a/src/services/ResourceService.js +++ b/src/services/ResourceService.js @@ -12,6 +12,7 @@ const helper = require('../common/helper') const logger = require('../common/logger') const errors = require('../common/errors') const ResourceRolePhaseDependencyService = require('./ResourceRolePhaseDependencyService') +const constants = require('../../app-constants') const payloadFields = ['id', 'challengeId', 'memberId', 'memberHandle', 'roleId', 'created', 'createdBy', 'updated', 'updatedBy', 'legacyId'] @@ -232,6 +233,10 @@ async function init (currentUser, challengeId, resource, isCreated) { const challengeRes = await helper.getRequest(`${config.CHALLENGE_API_URL}/${challengeId}`) const challenge = challengeRes.body + if (_.get(challenge, 'status') === constants.ChallengeStatuses.Completed && !isCreated) { + throw new errors.BadRequestError('Cannot delete resources of a completed challenge!') + } + // Prevent from creating more than 1 submitter resources on tasks if (_.get(challenge, 'task.isTask', false) && isCreated && resource.roleId === config.SUBMITTER_RESOURCE_ROLE_ID) { const existing = await getResources(currentUser, challengeId, config.SUBMITTER_RESOURCE_ROLE_ID, 1, 1)