@@ -245,7 +245,7 @@ async function init (currentUser, challengeId, resource, isCreated) {
245245
246246 // get member information using v3 API
247247 const handle = resource . memberHandle
248- const memberId = await helper . getMemberIdByHandle ( resource . memberHandle )
248+ const { memberId, email } = await helper . getMemberDetailsByHandle ( resource . memberHandle )
249249
250250 // check if the resource is reviewer role and has already made a submission in the challenge
251251 if ( resource . roleId === config . REVIEWER_RESOURCE_ROLE_ID || resource . roleId === config . ITERATIVE_REVIEWER_RESOURCE_ROLE_ID ) {
@@ -284,11 +284,11 @@ async function init (currentUser, challengeId, resource, isCreated) {
284284 }
285285 // skip phase dependency checks for tasks
286286 if ( _ . get ( challenge , 'task.isTask' , false ) ) {
287- return { resources, memberId, handle }
287+ return { resources, memberId, handle, email , challenge }
288288 }
289289 // bypass phase dependency checks if the caller is an m2m/admin
290290 if ( currentUser . isMachine || helper . hasAdminRole ( currentUser ) ) {
291- return { resources, memberId, handle }
291+ return { resources, memberId, handle, email , challenge }
292292 }
293293 // check phases dependencies
294294 const dependencies = await ResourceRolePhaseDependencyService . getDependencies ( { resourceRoleId : resource . roleId } )
@@ -316,7 +316,7 @@ async function init (currentUser, challengeId, resource, isCreated) {
316316 } )
317317
318318 // return resources and the member id
319- return { resources, memberId, handle }
319+ return { resources, memberId, handle, email , challenge }
320320}
321321
322322/**
@@ -331,7 +331,7 @@ async function createResource (currentUser, resource) {
331331
332332 // handle doesn't change in current version
333333 // Seems we don't need handle auto-correction(e.g. "THomaskranitsas"->"thomaskranitsas")
334- const { resources, memberId } = await init ( currentUser , challengeId , resource , true )
334+ const { resources, memberId, handle , email , challenge } = await init ( currentUser , challengeId , resource , true )
335335
336336 if ( _ . reduce ( resources ,
337337 ( result , r ) => _ . toString ( r . memberId ) === _ . toString ( memberId ) && r . roleId === resource . roleId ? true : result ,
@@ -358,6 +358,30 @@ async function createResource (currentUser, resource) {
358358
359359 logger . debug ( `Created resource: ${ JSON . stringify ( _ . pick ( ret , payloadFields ) ) } ` )
360360 await helper . postEvent ( config . RESOURCE_CREATE_TOPIC , _ . pick ( ret , payloadFields ) )
361+ if ( ! _ . get ( challenge , 'task.isTask' , false ) && resource . roleId === config . SUBMITTER_RESOURCE_ROLE_ID ) {
362+ const forumUrl = _ . get ( challenge , 'discussions[0].url' )
363+ let templateId = config . REGISTRATION_EMAIL . SENDGRID_TEMPLATE_ID
364+ if ( _ . isUndefined ( forumUrl ) ) {
365+ templateId = config . REGISTRATION_EMAIL . SENDGRID_TEMPLATE_ID_NO_FORUM
366+ }
367+ await helper . postEvent ( config . EMAIL_NOTIFICATIN_TOPIC , {
368+ from : config . REGISTRATION_EMAIL . EMAIL_FROM ,
369+ replyTo : config . REGISTRATION_EMAIL . EMAIL_FROM ,
370+ recipients : [ email ] ,
371+ data : {
372+ handle,
373+ challengeName : challenge . name ,
374+ forum : forumUrl ,
375+ submissionEndTime : new Date ( _ . get ( _ . find ( challenge . phases , phase => phase . name === 'Submission' ) , 'scheduledEndDate' ) ) . toUTCString ( ) ,
376+ submitUrl : _ . replace ( config . REGISTRATION_EMAIL . SUBMIT_URL , ':id' , challengeId ) ,
377+ reviewAppUrl : config . REGISTRATION_EMAIL . REVIEW_APP_URL + challenge . legacyId ,
378+ helpUrl : config . REGISTRATION_EMAIL . HELP_URL ,
379+ support : config . REGISTRATION_EMAIL . SUPPORT_EMAIL
380+ } ,
381+ sendgrid_template_id : templateId ,
382+ version : 'v3'
383+ } )
384+ }
361385
362386 return ret
363387 } catch ( err ) {
0 commit comments