@@ -858,190 +858,194 @@ searchChallenges.schema = {
858858 * @returns {Object } the created challenge
859859 */
860860async function createChallenge ( currentUser , challenge , userToken ) {
861- await challengeHelper . validateCreateChallengeRequest ( currentUser , challenge ) ;
862- let prizeTypeTmp = challengeHelper . validatePrizeSetsAndGetPrizeType ( challenge . prizeSets ) ;
863-
864- console . log ( "TYPE" , prizeTypeTmp ) ;
865- if ( challenge . legacy . selfService ) {
866- // if self-service, create a new project (what about if projectId is provided in the payload? confirm with business!)
867- if ( ! challenge . projectId && challengeHelper . isProjectIdRequired ( challenge . timelineTemplateId ) ) {
868- const selfServiceProjectName = `Self service - ${ currentUser . handle } - ${ challenge . name } ` ;
869- challenge . projectId = await helper . createSelfServiceProject (
870- selfServiceProjectName ,
871- "N/A" ,
872- config . NEW_SELF_SERVICE_PROJECT_TYPE ,
873- userToken
874- ) ;
875- }
861+ var ret
862+ try {
863+ await challengeHelper . validateCreateChallengeRequest ( currentUser , challenge ) ;
864+ let prizeTypeTmp = challengeHelper . validatePrizeSetsAndGetPrizeType ( challenge . prizeSets ) ;
865+
866+ console . log ( "TYPE" , prizeTypeTmp ) ;
867+ if ( challenge . legacy . selfService ) {
868+ // if self-service, create a new project (what about if projectId is provided in the payload? confirm with business!)
869+ if ( ! challenge . projectId && challengeHelper . isProjectIdRequired ( challenge . timelineTemplateId ) ) {
870+ const selfServiceProjectName = `Self service - ${ currentUser . handle } - ${ challenge . name } ` ;
871+ challenge . projectId = await helper . createSelfServiceProject (
872+ selfServiceProjectName ,
873+ "N/A" ,
874+ config . NEW_SELF_SERVICE_PROJECT_TYPE ,
875+ userToken
876+ ) ;
877+ }
876878
877- if ( challenge . metadata && challenge . metadata . length > 0 ) {
878- for ( const entry of challenge . metadata ) {
879- if ( challenge . description . includes ( `{{${ entry . name } }}` ) ) {
880- challenge . description = challenge . description
881- . split ( `{{${ entry . name } }}` )
882- . join ( entry . value ) ;
879+ if ( challenge . metadata && challenge . metadata . length > 0 ) {
880+ for ( const entry of challenge . metadata ) {
881+ if ( challenge . description . includes ( `{{${ entry . name } }}` ) ) {
882+ challenge . description = challenge . description
883+ . split ( `{{${ entry . name } }}` )
884+ . join ( entry . value ) ;
885+ }
883886 }
884887 }
885888 }
886- }
887889
888- /** Ensure project exists, and set direct project id, billing account id & markup */
889- if ( challengeHelper . isProjectIdRequired ( challenge . timelineTemplateId ) || challenge . projectId ) {
890- const { projectId } = challenge ;
890+ /** Ensure project exists, and set direct project id, billing account id & markup */
891+ if ( challengeHelper . isProjectIdRequired ( challenge . timelineTemplateId ) || challenge . projectId ) {
892+ const { projectId } = challenge ;
891893
892- const { directProjectId } = await projectHelper . getProject ( projectId , currentUser ) ;
893- const { billingAccountId, markup } = await projectHelper . getProjectBillingInformation (
894- projectId
895- ) ;
894+ const { directProjectId } = await projectHelper . getProject ( projectId , currentUser ) ;
895+ const { billingAccountId, markup } = await projectHelper . getProjectBillingInformation (
896+ projectId
897+ ) ;
896898
897- _ . set ( challenge , "legacy.directProjectId" , directProjectId ) ;
898- _ . set ( challenge , "billing.billingAccountId" , billingAccountId ) ;
899- _ . set ( challenge , "billing.markup" , markup || 0 ) ;
900- }
899+ _ . set ( challenge , "legacy.directProjectId" , directProjectId ) ;
900+ _ . set ( challenge , "billing.billingAccountId" , billingAccountId ) ;
901+ _ . set ( challenge , "billing.markup" , markup || 0 ) ;
902+ }
901903
902- if ( ! _ . isUndefined ( _ . get ( challenge , "legacy.reviewType" ) ) ) {
903- _ . set ( challenge , "legacy.reviewType" , _ . toUpper ( _ . get ( challenge , "legacy.reviewType" ) ) ) ;
904- }
904+ if ( ! _ . isUndefined ( _ . get ( challenge , "legacy.reviewType" ) ) ) {
905+ _ . set ( challenge , "legacy.reviewType" , _ . toUpper ( _ . get ( challenge , "legacy.reviewType" ) ) ) ;
906+ }
905907
906- if ( ! challenge . status ) {
907- challenge . status = constants . challengeStatuses . New ;
908- }
908+ if ( ! challenge . status ) {
909+ challenge . status = constants . challengeStatuses . New ;
910+ }
909911
910- if ( ! challenge . startDate ) {
911- challenge . startDate = new Date ( ) . toISOString ( ) ;
912- } else {
913- challenge . startDate = convertToISOString ( challenge . startDate ) ;
914- }
912+ if ( ! challenge . startDate ) {
913+ challenge . startDate = new Date ( ) . toISOString ( ) ;
914+ } else {
915+ challenge . startDate = convertToISOString ( challenge . startDate ) ;
916+ }
915917
916- const { track, type } = await challengeHelper . validateAndGetChallengeTypeAndTrack ( challenge ) ;
918+ const { track, type } = await challengeHelper . validateAndGetChallengeTypeAndTrack ( challenge ) ;
917919
918- if ( _ . get ( type , "isTask" ) ) {
919- _ . set ( challenge , "task.isTask" , true ) ;
920- // this is only applicable for WorkType: Gig, i.e., Tasks created from Salesforce
921- if ( challenge . billing != null && challenge . billing . clientBillingRate != null ) {
922- _ . set ( challenge , "billing.clientBillingRate" , challenge . billing . clientBillingRate ) ;
923- }
920+ if ( _ . get ( type , "isTask" ) ) {
921+ _ . set ( challenge , "task.isTask" , true ) ;
922+ // this is only applicable for WorkType: Gig, i.e., Tasks created from Salesforce
923+ if ( challenge . billing != null && challenge . billing . clientBillingRate != null ) {
924+ _ . set ( challenge , "billing.clientBillingRate" , challenge . billing . clientBillingRate ) ;
925+ }
924926
925- if ( _ . isUndefined ( _ . get ( challenge , "task.isAssigned" ) ) ) {
926- _ . set ( challenge , "task.isAssigned" , false ) ;
927- }
928- if ( _ . isUndefined ( _ . get ( challenge , "task.memberId" ) ) ) {
929- _ . set ( challenge , "task.memberId" , null ) ;
930- } else {
931- throw new errors . BadRequestError ( `Cannot assign a member before the challenge gets created.` ) ;
927+ if ( _ . isUndefined ( _ . get ( challenge , "task.isAssigned" ) ) ) {
928+ _ . set ( challenge , "task.isAssigned" , false ) ;
929+ }
930+ if ( _ . isUndefined ( _ . get ( challenge , "task.memberId" ) ) ) {
931+ _ . set ( challenge , "task.memberId" , null ) ;
932+ } else {
933+ throw new errors . BadRequestError ( `Cannot assign a member before the challenge gets created.` ) ;
934+ }
932935 }
933- }
934936
935- if ( challenge . phases && challenge . phases . length > 0 ) {
936- await phaseHelper . validatePhases ( challenge . phases ) ;
937- }
937+ if ( challenge . phases && challenge . phases . length > 0 ) {
938+ await phaseHelper . validatePhases ( challenge . phases ) ;
939+ }
938940
939- // populate phases
940- if ( ! challenge . timelineTemplateId ) {
941- if ( challenge . typeId && challenge . trackId ) {
942- const supportedTemplates =
943- await ChallengeTimelineTemplateService . searchChallengeTimelineTemplates ( {
944- typeId : challenge . typeId ,
945- trackId : challenge . trackId ,
946- isDefault : true ,
947- } ) ;
948- const challengeTimelineTemplate = supportedTemplates . result [ 0 ] ;
949- if ( ! challengeTimelineTemplate ) {
950- throw new errors . BadRequestError (
951- `The selected trackId ${ challenge . trackId } and typeId: ${ challenge . typeId } does not have a default timeline template. Please provide a timelineTemplateId`
952- ) ;
941+ // populate phases
942+ if ( ! challenge . timelineTemplateId ) {
943+ if ( challenge . typeId && challenge . trackId ) {
944+ const supportedTemplates =
945+ await ChallengeTimelineTemplateService . searchChallengeTimelineTemplates ( {
946+ typeId : challenge . typeId ,
947+ trackId : challenge . trackId ,
948+ isDefault : true ,
949+ } ) ;
950+ const challengeTimelineTemplate = supportedTemplates . result [ 0 ] ;
951+ if ( ! challengeTimelineTemplate ) {
952+ throw new errors . BadRequestError (
953+ `The selected trackId ${ challenge . trackId } and typeId: ${ challenge . typeId } does not have a default timeline template. Please provide a timelineTemplateId`
954+ ) ;
955+ }
956+ challenge . timelineTemplateId = challengeTimelineTemplate . timelineTemplateId ;
957+ } else {
958+ throw new errors . BadRequestError ( `trackId and typeId are required to create a challenge` ) ;
953959 }
954- challenge . timelineTemplateId = challengeTimelineTemplate . timelineTemplateId ;
955- } else {
956- throw new errors . BadRequestError ( `trackId and typeId are required to create a challenge` ) ;
957960 }
958- }
959- challenge . phases = await phaseHelper . populatePhasesForChallengeCreation (
960- challenge . phases ,
961- challenge . startDate ,
962- challenge . timelineTemplateId
963- ) ;
961+ challenge . phases = await phaseHelper . populatePhasesForChallengeCreation (
962+ challenge . phases ,
963+ challenge . startDate ,
964+ challenge . timelineTemplateId
965+ ) ;
964966
965- // populate challenge terms
966- // const projectTerms = await helper.getProjectDefaultTerms(challenge.projectId)
967- // challenge.terms = await helper.validateChallengeTerms(_.union(projectTerms, challenge.terms))
968- // TODO - challenge terms returned from projects api don't have a role associated
969- // this will need to be updated to associate project terms with a roleId
970- challenge . terms = await helper . validateChallengeTerms ( challenge . terms || [ ] ) ;
967+ // populate challenge terms
968+ // const projectTerms = await helper.getProjectDefaultTerms(challenge.projectId)
969+ // challenge.terms = await helper.validateChallengeTerms(_.union(projectTerms, challenge.terms))
970+ // TODO - challenge terms returned from projects api don't have a role associated
971+ // this will need to be updated to associate project terms with a roleId
972+ challenge . terms = await helper . validateChallengeTerms ( challenge . terms || [ ] ) ;
971973
972- // default the descriptionFormat
973- if ( ! challenge . descriptionFormat ) {
974- challenge . descriptionFormat = "markdown" ;
975- }
974+ // default the descriptionFormat
975+ if ( ! challenge . descriptionFormat ) {
976+ challenge . descriptionFormat = "markdown" ;
977+ }
976978
977- if ( challenge . phases && challenge . phases . length > 0 ) {
978- challenge . endDate = helper . calculateChallengeEndDate ( challenge ) ;
979- }
979+ if ( challenge . phases && challenge . phases . length > 0 ) {
980+ challenge . endDate = helper . calculateChallengeEndDate ( challenge ) ;
981+ }
980982
981- if ( challenge . events == null ) challenge . events = [ ] ;
982- if ( challenge . attachments == null ) challenge . attachments = [ ] ;
983- if ( challenge . prizeSets == null ) challenge . prizeSets = [ ] ;
984- if ( challenge . metadata == null ) challenge . metadata = [ ] ;
985- if ( challenge . groups == null ) challenge . groups = [ ] ;
986- if ( challenge . tags == null ) challenge . tags = [ ] ;
987- if ( challenge . startDate != null ) challenge . startDate = challenge . startDate ;
988- if ( challenge . endDate != null ) challenge . endDate = challenge . endDate ;
989- if ( challenge . discussions == null ) challenge . discussions = [ ] ;
990- if ( challenge . skills == null ) challenge . skills = [ ] ;
983+ if ( challenge . events == null ) challenge . events = [ ] ;
984+ if ( challenge . attachments == null ) challenge . attachments = [ ] ;
985+ if ( challenge . prizeSets == null ) challenge . prizeSets = [ ] ;
986+ if ( challenge . metadata == null ) challenge . metadata = [ ] ;
987+ if ( challenge . groups == null ) challenge . groups = [ ] ;
988+ if ( challenge . tags == null ) challenge . tags = [ ] ;
989+ if ( challenge . startDate != null ) challenge . startDate = challenge . startDate ;
990+ if ( challenge . endDate != null ) challenge . endDate = challenge . endDate ;
991+ if ( challenge . discussions == null ) challenge . discussions = [ ] ;
992+ if ( challenge . skills == null ) challenge . skills = [ ] ;
991993
992- challenge . metadata = challenge . metadata . map ( ( m ) => ( {
993- name : m . name ,
994- value : typeof m . value === "string" ? m . value : JSON . stringify ( m . value ) ,
995- } ) ) ;
994+ challenge . metadata = challenge . metadata . map ( ( m ) => ( {
995+ name : m . name ,
996+ value : typeof m . value === "string" ? m . value : JSON . stringify ( m . value ) ,
997+ } ) ) ;
996998
997- const grpcMetadata = new GrpcMetadata ( ) ;
999+ const grpcMetadata = new GrpcMetadata ( ) ;
9981000
999- grpcMetadata . set ( "handle" , currentUser . handle ) ;
1000- grpcMetadata . set ( "userId" , currentUser . userId ) ;
1001- grpcMetadata . set ( "token" , await getM2MToken ( ) ) ;
1001+ grpcMetadata . set ( "handle" , currentUser . handle ) ;
1002+ grpcMetadata . set ( "userId" , currentUser . userId ) ;
1003+ grpcMetadata . set ( "token" , await getM2MToken ( ) ) ;
10021004
1003- const prizeType = challengeHelper . validatePrizeSetsAndGetPrizeType ( challenge . prizeSets ) ;
1005+ const prizeType = challengeHelper . validatePrizeSetsAndGetPrizeType ( challenge . prizeSets ) ;
10041006
1005- if ( prizeType === constants . prizeTypes . USD ) {
1006- convertPrizeSetValuesToCents ( challenge . prizeSets ) ;
1007- }
1007+ if ( prizeType === constants . prizeTypes . USD ) {
1008+ convertPrizeSetValuesToCents ( challenge . prizeSets ) ;
1009+ }
10081010
1009- const ret = await challengeDomain . create ( challenge , grpcMetadata ) ;
1011+ ret = await challengeDomain . create ( challenge , grpcMetadata ) ;
10101012
1011- if ( prizeType === constants . prizeTypes . USD ) {
1012- convertPrizeSetValuesToDollars ( ret . prizeSets , ret . overview ) ;
1013- }
1013+ if ( prizeType === constants . prizeTypes . USD ) {
1014+ convertPrizeSetValuesToDollars ( ret . prizeSets , ret . overview ) ;
1015+ }
10141016
1015- ret . numOfSubmissions = 0 ;
1016- ret . numOfRegistrants = 0 ;
1017+ ret . numOfSubmissions = 0 ;
1018+ ret . numOfRegistrants = 0 ;
10171019
1018- enrichChallengeForResponse ( ret , track , type ) ;
1020+ enrichChallengeForResponse ( ret , track , type ) ;
10191021
1020- // Create in ES
1021- await esClient . create ( {
1022- index : config . get ( "ES.ES_INDEX" ) ,
1023- type : config . get ( "ES.OPENSEARCH" ) == "false" ? config . get ( "ES.ES_TYPE" ) : undefined ,
1024- refresh : config . get ( "ES.ES_REFRESH" ) ,
1025- id : ret . id ,
1026- body : ret ,
1027- } ) ;
1022+ // Create in ES
1023+ await esClient . create ( {
1024+ index : config . get ( "ES.ES_INDEX" ) ,
1025+ type : config . get ( "ES.OPENSEARCH" ) == "false" ? config . get ( "ES.ES_TYPE" ) : undefined ,
1026+ refresh : config . get ( "ES.ES_REFRESH" ) ,
1027+ id : ret . id ,
1028+ body : ret ,
1029+ } ) ;
10281030
1029- // If the challenge is self-service, add the creating user as the "client manager", *not* the manager
1030- // This is necessary for proper handling of the vanilla embed on the self-service work item dashboard
1031+ // If the challenge is self-service, add the creating user as the "client manager", *not* the manager
1032+ // This is necessary for proper handling of the vanilla embed on the self-service work item dashboard
10311033
1032- if ( challenge . legacy . selfService ) {
1033- if ( currentUser . handle ) {
1034- await helper . createResource ( ret . id , ret . createdBy , config . CLIENT_MANAGER_ROLE_ID ) ;
1035- }
1036- } else {
1037- if ( currentUser . handle ) {
1038- await helper . createResource ( ret . id , ret . createdBy , config . MANAGER_ROLE_ID ) ;
1034+ if ( challenge . legacy . selfService ) {
1035+ if ( currentUser . handle ) {
1036+ await helper . createResource ( ret . id , ret . createdBy , config . CLIENT_MANAGER_ROLE_ID ) ;
1037+ }
1038+ } else {
1039+ if ( currentUser . handle ) {
1040+ await helper . createResource ( ret . id , ret . createdBy , config . MANAGER_ROLE_ID ) ;
1041+ }
10391042 }
1040- }
1041-
1042- // post bus event
1043- await helper . postBusEvent ( constants . Topics . ChallengeCreated , ret ) ;
10441043
1044+ // post bus event
1045+ await helper . postBusEvent ( constants . Topics . ChallengeCreated , ret ) ;
1046+ } catch ( ex ) {
1047+ logger . logFullError ( err ) ;
1048+ }
10451049 return ret ;
10461050}
10471051createChallenge . schema = {
0 commit comments