@@ -743,6 +743,8 @@ async function createChallenge (currentUser, challenge, userToken) {
743
743
}
744
744
if ( _ . isUndefined ( _ . get ( challenge , 'task.memberId' ) ) ) {
745
745
_ . set ( challenge , 'task.memberId' , null )
746
+ } else {
747
+ throw new errors . BadRequestError ( `Cannot assign a member before the challenge gets created.` )
746
748
}
747
749
}
748
750
if ( challenge . phases && challenge . phases . length > 0 ) {
@@ -1420,6 +1422,18 @@ async function update (currentUser, challengeId, data, userToken, isFull) {
1420
1422
data . winners = null
1421
1423
}
1422
1424
1425
+ const { track, type } = await validateChallengeData ( _ . pick ( challenge , [ 'trackId' , 'typeId' ] ) )
1426
+
1427
+ if ( _ . get ( type , 'isTask' ) ) {
1428
+ if ( ! _ . isUndefined ( _ . get ( challenge , 'task.memberId' ) ) ) {
1429
+ const challengeResources = await helper . getChallengeResources ( challengeId )
1430
+ const registrants = _ . filter ( challengeResources , r => r . roleId === config . SUBMITTER_ROLE_ID )
1431
+ if ( ! _ . find ( registrants , r => _ . toString ( r . memberId ) === _ . toString ( _ . get ( challenge , 'task.memberId' ) ) ) ) {
1432
+ throw new errors . BadRequestError ( `Member ${ _ . get ( challenge , 'task.memberId' ) } is not a submitter resource of challenge ${ challengeId } ` )
1433
+ }
1434
+ }
1435
+ }
1436
+
1423
1437
logger . debug ( `Challenge.update id: ${ challengeId } Details: ${ JSON . stringify ( updateDetails ) } ` )
1424
1438
await models . Challenge . update ( { id : challengeId } , updateDetails )
1425
1439
@@ -1460,7 +1474,6 @@ async function update (currentUser, challengeId, data, userToken, isFull) {
1460
1474
}
1461
1475
1462
1476
// Populate challenge.track and challenge.type based on the track/type IDs
1463
- const { track, type } = await validateChallengeData ( _ . pick ( challenge , [ 'trackId' , 'typeId' ] ) )
1464
1477
1465
1478
if ( track ) {
1466
1479
challenge . track = track . name
0 commit comments