@@ -349,6 +349,16 @@ async function handleIssueClose(event, issue) {
349
349
dbIssue = await ensureChallengeExists ( event , issue ) ;
350
350
event . dbIssue = dbIssue ;
351
351
352
+ // if the issue has payment success or payment pending status, we'll ignore this process.
353
+ if ( dbIssue && dbIssue . status === 'challenge_payment_successful' ) {
354
+ logger . debug ( `Ignoring close issue processing. The issue has challenge_payment_successful.` ) ;
355
+ return ;
356
+ }
357
+ if ( dbIssue && dbIssue . status === 'challenge_payment_pending' ) {
358
+ logger . debug ( `Ignoring close issue processing. The issue has challenge_payment_pending.` ) ;
359
+ return ;
360
+ }
361
+
352
362
if ( ! event . paymentSuccessful ) {
353
363
let closeChallenge = false ;
354
364
// if issue is closed without Fix accepted label
@@ -392,6 +402,12 @@ async function handleIssueClose(event, issue) {
392
402
return ;
393
403
}
394
404
405
+ // update the issue status to payment pending to prevent double processing.
406
+ await dbHelper . update ( models . Issue , dbIssue . id , {
407
+ status : 'challenge_payment_pending' ,
408
+ updatedAt : new Date ( )
409
+ } ) ;
410
+
395
411
logger . debug ( `Looking up TC handle of git user: ${ event . data . assignee . id } ` ) ;
396
412
const assigneeMember = await userService . getTCUserName ( event . provider , event . data . assignee . id ) ;
397
413
event . assigneeMember = assigneeMember ;
@@ -461,23 +477,34 @@ async function handleIssueClose(event, issue) {
461
477
}
462
478
} catch ( e ) {
463
479
event . paymentSuccessful = event . paymentSuccessful === true ; // if once paid shouldn't be false
480
+ // update the issue status to payment failed
481
+ if ( ! event . paymentSuccessful ) {
482
+ await dbHelper . update ( models . Issue , dbIssue . id , {
483
+ status : 'challenge_payment_failed' ,
484
+ updatedAt : new Date ( )
485
+ } ) ;
486
+ }
464
487
await eventService . handleEventGracefully ( event , issue , e ) ;
465
488
return ;
466
489
}
467
- try {
468
- logger . debug ( 'update issue as paid' ) ;
469
- const labels = _ ( dbIssue . labels )
470
- . filter ( ( i ) => i !== config . OPEN_FOR_PICKUP_ISSUE_LABEL && i !== config . ASSIGNED_ISSUE_LABEL )
471
- . push ( config . ASSIGNED_ISSUE_LABEL )
472
- . value ( ) ;
473
- dbIssue = await dbHelper . update ( models . Issue , dbIssue . id , {
474
- labels,
475
- updatedAt : new Date ( )
476
- } ) ;
477
- await gitHelper . markIssueAsPaid ( event , issue . number , dbIssue . challengeId , labels ) ;
478
- } catch ( e ) {
479
- await eventService . handleEventGracefully ( event , issue , e ) ;
480
- return ;
490
+ // Only update the label to paid if the payment successfully processed.
491
+ if ( event . paymentSuccessful ) {
492
+ try {
493
+ logger . debug ( 'update issue as paid' ) ;
494
+ const labels = _ ( dbIssue . labels )
495
+ . filter ( ( i ) => i !== config . OPEN_FOR_PICKUP_ISSUE_LABEL && i !== config . ASSIGNED_ISSUE_LABEL )
496
+ . push ( config . ASSIGNED_ISSUE_LABEL )
497
+ . value ( ) ;
498
+ dbIssue = await dbHelper . update ( models . Issue , dbIssue . id , {
499
+ labels,
500
+ status : 'challenge_payment_successful' ,
501
+ updatedAt : new Date ( )
502
+ } ) ;
503
+ await gitHelper . markIssueAsPaid ( event , issue . number , dbIssue . challengeId , labels ) ;
504
+ } catch ( e ) {
505
+ await eventService . handleEventGracefully ( event , issue , e ) ;
506
+ return ;
507
+ }
481
508
}
482
509
}
483
510
0 commit comments