Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit 6f56f4c

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents a49db13 + 60ab9a1 commit 6f56f4c

File tree

1 file changed

+41
-14
lines changed

1 file changed

+41
-14
lines changed

services/IssueService.js

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,16 @@ async function handleIssueClose(event, issue) {
349349
dbIssue = await ensureChallengeExists(event, issue);
350350
event.dbIssue = dbIssue;
351351

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+
352362
if (!event.paymentSuccessful) {
353363
let closeChallenge = false;
354364
// if issue is closed without Fix accepted label
@@ -392,6 +402,12 @@ async function handleIssueClose(event, issue) {
392402
return;
393403
}
394404

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+
395411
logger.debug(`Looking up TC handle of git user: ${event.data.assignee.id}`);
396412
const assigneeMember = await userService.getTCUserName(event.provider, event.data.assignee.id);
397413
event.assigneeMember = assigneeMember;
@@ -461,23 +477,34 @@ async function handleIssueClose(event, issue) {
461477
}
462478
} catch (e) {
463479
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+
}
464487
await eventService.handleEventGracefully(event, issue, e);
465488
return;
466489
}
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+
}
481508
}
482509
}
483510

0 commit comments

Comments
 (0)