@@ -858,190 +858,194 @@ searchChallenges.schema = {
858
858
* @returns {Object } the created challenge
859
859
*/
860
860
async 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
+ }
876
878
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
+ }
883
886
}
884
887
}
885
888
}
886
- }
887
889
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 ;
891
893
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
+ ) ;
896
898
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
+ }
901
903
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
+ }
905
907
906
- if ( ! challenge . status ) {
907
- challenge . status = constants . challengeStatuses . New ;
908
- }
908
+ if ( ! challenge . status ) {
909
+ challenge . status = constants . challengeStatuses . New ;
910
+ }
909
911
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
+ }
915
917
916
- const { track, type } = await challengeHelper . validateAndGetChallengeTypeAndTrack ( challenge ) ;
918
+ const { track, type } = await challengeHelper . validateAndGetChallengeTypeAndTrack ( challenge ) ;
917
919
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
+ }
924
926
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
+ }
932
935
}
933
- }
934
936
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
+ }
938
940
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` ) ;
953
959
}
954
- challenge . timelineTemplateId = challengeTimelineTemplate . timelineTemplateId ;
955
- } else {
956
- throw new errors . BadRequestError ( `trackId and typeId are required to create a challenge` ) ;
957
960
}
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
+ ) ;
964
966
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 || [ ] ) ;
971
973
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
+ }
976
978
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
+ }
980
982
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 = [ ] ;
991
993
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
+ } ) ) ;
996
998
997
- const grpcMetadata = new GrpcMetadata ( ) ;
999
+ const grpcMetadata = new GrpcMetadata ( ) ;
998
1000
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 ( ) ) ;
1002
1004
1003
- const prizeType = challengeHelper . validatePrizeSetsAndGetPrizeType ( challenge . prizeSets ) ;
1005
+ const prizeType = challengeHelper . validatePrizeSetsAndGetPrizeType ( challenge . prizeSets ) ;
1004
1006
1005
- if ( prizeType === constants . prizeTypes . USD ) {
1006
- convertPrizeSetValuesToCents ( challenge . prizeSets ) ;
1007
- }
1007
+ if ( prizeType === constants . prizeTypes . USD ) {
1008
+ convertPrizeSetValuesToCents ( challenge . prizeSets ) ;
1009
+ }
1008
1010
1009
- const ret = await challengeDomain . create ( challenge , grpcMetadata ) ;
1011
+ ret = await challengeDomain . create ( challenge , grpcMetadata ) ;
1010
1012
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
+ }
1014
1016
1015
- ret . numOfSubmissions = 0 ;
1016
- ret . numOfRegistrants = 0 ;
1017
+ ret . numOfSubmissions = 0 ;
1018
+ ret . numOfRegistrants = 0 ;
1017
1019
1018
- enrichChallengeForResponse ( ret , track , type ) ;
1020
+ enrichChallengeForResponse ( ret , track , type ) ;
1019
1021
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
+ } ) ;
1028
1030
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
1031
1033
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
+ }
1039
1042
}
1040
- }
1041
-
1042
- // post bus event
1043
- await helper . postBusEvent ( constants . Topics . ChallengeCreated , ret ) ;
1044
1043
1044
+ // post bus event
1045
+ await helper . postBusEvent ( constants . Topics . ChallengeCreated , ret ) ;
1046
+ } catch ( ex ) {
1047
+ logger . logFullError ( err ) ;
1048
+ }
1045
1049
return ret ;
1046
1050
}
1047
1051
createChallenge . schema = {
0 commit comments