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

Commit 65e9932

Browse files
authored
Merge pull request #114 from dhruvit-r/develop
fix: additional bug fixes for Gitlab service refactor
2 parents 031d16a + 4220512 commit 65e9932

7 files changed

+29
-33
lines changed

services/GitlabService.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,10 @@ class GitlabService {
159159
} finally {
160160
if (lockedUser) {
161161
logger.debug(`[Lock ID: ${lockId}] Releasing lock on user ${this.#user.username}.`);
162-
this.#user = await dbHelper.releaseLockOnUser(this.#user.id, lockId);
162+
const newUser = await dbHelper.releaseLockOnUser(this.#user.id, lockId);
163+
// Not assigning directly because the old object sometimes has properties
164+
// that are not in the new one
165+
_.assign(this.#user, newUser);
163166
}
164167
}
165168
}

services/IssueService.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ const models = require('../models');
2020
const dbHelper = require('../utils/db-helper');
2121
const helper = require('../utils/helper');
2222
const gitHelper = require('../utils/git-helper');
23+
const constants = require('../constants');
2324
const userService = require('./UserService');
2425
const eventService = require('./EventService');
25-
const constants = require('../constants');
2626

2727

2828
// A variable to store issue creation lock to prevent duplicate creation process.
@@ -80,7 +80,7 @@ async function ensureChallengeExists(event, issue, create = true) {
8080
logger.debugWithContext('dbIssue is PENDING', event, issue);
8181
throw errors.internalDependencyError(`Challenge for the updated issue ${issue.number} is creating, rescheduling this event`);
8282
}
83-
const hasOpenForPickupLabel = _(issue.labels).includes(config.OPEN_FOR_PICKUP_ISSUE_LABEL);
83+
const hasOpenForPickupLabel = _.includes(issue.labels, config.OPEN_FOR_PICKUP_ISSUE_LABEL);
8484
if (dbIssue && dbIssue.status === constants.ISSUE_STATUS.CHALLENGE_CREATION_FAILED && hasOpenForPickupLabel) {
8585
// remove issue from db
8686
await dbHelper.removeIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
@@ -437,7 +437,7 @@ async function handleIssueClose(event, issue) { // eslint-disable-line
437437

438438
if (closeChallenge) {
439439
logger.debugWithContext(`The associated challenge ${dbIssue.challengeUUID} is being scheduled for cancellation since no payment will be given`,
440-
event, issue);
440+
event, issue);
441441
await dbHelper.update(models.Issue, dbIssue.id, {
442442
status: constants.ISSUE_STATUS.CHALLENGE_CANCELLED,
443443
updatedAt: new Date()
@@ -500,7 +500,7 @@ async function handleIssueClose(event, issue) { // eslint-disable-line
500500
if (createCopilotPayments) {
501501
logger.debugWithContext('Setting copilot payment');
502502

503-
const updateBody = {
503+
const _updateBody = {
504504
prizeSets: [{
505505
type: 'placement',
506506
prizes: _.map(issue.prizes, (prize) => ({type: 'USD', value: prize}))
@@ -511,7 +511,7 @@ async function handleIssueClose(event, issue) { // eslint-disable-line
511511
}
512512
]
513513
};
514-
await topcoderApiHelper.updateChallenge(dbIssue.challengeUUID, updateBody);
514+
await topcoderApiHelper.updateChallenge(dbIssue.challengeUUID, _updateBody);
515515
} else {
516516
logger.debugWithContext('Create copilot payments is unchecked on the Topcoder-X project setup, so skipping', event, issue);
517517
}
@@ -575,7 +575,6 @@ async function handleIssueClose(event, issue) { // eslint-disable-line
575575
}
576576
}
577577

578-
579578
/**
580579
* handles the issue create event
581580
* @param {Object} event the event
@@ -636,7 +635,7 @@ async function handleIssueCreate(event, issue, forceAssign = false) {
636635
issue.challengeUUID = await topcoderApiHelper.createChallenge({
637636
name: issue.title,
638637
projectId,
639-
tags: !!project.tags ? project.tags.split(',') : [],
638+
tags: project.tags ? project.tags.split(',') : [],
640639
detailedRequirements: issue.body,
641640
prizes: issue.prizes
642641
});
@@ -676,7 +675,7 @@ async function handleIssueCreate(event, issue, forceAssign = false) {
676675
}
677676
delete issueCreationLock[creationLockKey];
678677
} catch (err) {
679-
logger.error(`Comment creation failure: ${err}`);
678+
logger.error(`Comment creation failure: ${err}`, err);
680679
delete issueCreationLock[creationLockKey];
681680
logger.debugWithContext(`new challenge created with id ${issue.challengeUUID} for issue ${issue.number}`, event, issue);
682681
}

services/UserService.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,21 @@ const models = require('../models');
2525
*/
2626
async function getTCUserName(provider, gitUser) {
2727
Joi.attempt({provider, gitUser}, getTCUserName.schema);
28-
const criteria = {};
2928
if (_.isNumber(gitUser) || v.isUUID(gitUser)) {
3029
if (provider === 'github') {
3130
return await dbHelper.queryOneUserMappingByGithubUserId(models.GithubUserMapping, gitUser);
3231
} else if (provider === 'gitlab') {
3332
return await dbHelper.queryOneUserMappingByGitlabUserId(models.GitlabUserMapping, gitUser);
3433
}
35-
} else if (_.isString(gitUser) || v.isEmail(gitUser)) {
34+
}
35+
if (_.isString(gitUser) || v.isEmail(gitUser)) {
3636
if (provider === 'github') {
3737
return await dbHelper.queryOneUserMappingByGithubUsername(models.GithubUserMapping, gitUser);
3838
} else if (provider === 'gitlab') {
3939
return await dbHelper.queryOneUserMappingByGitlabUsername(models.GitlabUserMapping, gitUser);
4040
}
4141
}
42-
if (_.isEmpty(criteria)) {
43-
throw new Error('Can\'t find the TCUserName. Invalid gitUser.');
44-
}
42+
throw new Error('Can\'t find the TCUserName. Invalid gitUser.');
4543
}
4644

4745
getTCUserName.schema = {
@@ -54,7 +52,7 @@ getTCUserName.schema = {
5452
* gets the access token of repository's copilot/owner captured by Topcoder x tool
5553
* @param {String} provider the repo provider
5654
* @param {String} repoFullName the full name of repository
57-
* @returns {String} the copilot/owner if exists
55+
* @returns {Promise<String>} the copilot/owner if exists
5856
*/
5957
async function getRepositoryCopilotOrOwner(provider, repoFullName) {
6058
Joi.attempt({provider, repoFullName}, getRepositoryCopilotOrOwner.schema);
@@ -96,10 +94,7 @@ async function getRepositoryCopilotOrOwner(provider, repoFullName) {
9694
}
9795

9896
return {
99-
accessToken: user.accessToken,
100-
accessTokenExpiration: user.accessTokenExpiration,
101-
refreshToken: user.refreshToken,
102-
userProviderId: user.userProviderId,
97+
...user,
10398
topcoderUsername: userMapping.topcoderUsername
10499
};
105100
}

utils/git-helper.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class GitHelper {
2828
await gitHubService.createComment(event.copilot, event.data.repository.full_name, issueNumber, comment);
2929
} else if (event.provider === 'gitlab') {
3030
const gitlabService = await GitlabService.create(event.copilot);
31-
await gitlabService.createComment(event.copilot, event.data.repository, issueNumber, comment);
31+
await gitlabService.createComment(event.data.repository, issueNumber, comment);
3232
}
3333
}
3434

@@ -43,7 +43,7 @@ class GitHelper {
4343
await gitHubService.addLabels(event.copilot, event.data.repository.full_name, issueNumber, labels);
4444
} else if (event.provider === 'gitlab') {
4545
const gitlabService = await GitlabService.create(event.copilot);
46-
await gitlabService.addLabels(event.copilot, event.data.repository, issueNumber, labels);
46+
await gitlabService.addLabels(event.data.repository, issueNumber, labels);
4747
}
4848
}
4949

@@ -57,22 +57,22 @@ class GitHelper {
5757
await gitHubService.changeState(event.copilot, event.data.repository.full_name, issue.number, 'open');
5858
} else if (event.provider === 'gitlab') {
5959
const gitlabService = await GitlabService.create(event.copilot);
60-
await gitlabService.changeState(event.copilot, event.data.repository, issue.number, 'reopen');
60+
await gitlabService.changeState(event.data.repository, issue.number, 'reopen');
6161
}
6262
}
6363

6464
/**
6565
* Gets the user name by user id
6666
* @param {Object} event the event
6767
* @param {Number} assigneeUserId the user id
68-
* @returns {String} the username
68+
* @returns {Promise<String>} the username
6969
*/
7070
async getUsernameById(event, assigneeUserId) {
7171
if (event.provider === 'github') {
7272
return await gitHubService.getUsernameById(event.copilot, assigneeUserId);
7373
} else if (event.provider === 'gitlab') {
7474
const gitlabService = await GitlabService.create(event.copilot);
75-
return await gitlabService.getUsernameById(event.copilot, assigneeUserId);
75+
return await gitlabService.getUsernameById(assigneeUserId);
7676
}
7777
return null;
7878
}
@@ -89,7 +89,7 @@ class GitHelper {
8989
await gitHubService.removeAssign(event.copilot, event.data.repository.full_name, issueNumber, assigneeUsername);
9090
} else if (event.provider === 'gitlab') {
9191
const gitlabService = await GitlabService.create(event.copilot);
92-
await gitlabService.removeAssign(event.copilot, event.data.repository, issueNumber, assigneeUserId);
92+
await gitlabService.removeAssign(event.data.repository, issueNumber, assigneeUserId);
9393
}
9494
}
9595

@@ -104,7 +104,7 @@ class GitHelper {
104104
await gitHubService.updateIssue(event.copilot, event.data.repository.full_name, issueNumber, newTitle);
105105
} else if (event.provider === 'gitlab') {
106106
const gitlabService = await GitlabService.create(event.copilot);
107-
await gitlabService.updateIssue(event.copilot, event.data.repository, issueNumber, newTitle);
107+
await gitlabService.updateIssue(event.data.repository, issueNumber, newTitle);
108108
}
109109
}
110110

@@ -120,7 +120,7 @@ class GitHelper {
120120
} else if (event.provider === 'gitlab') {
121121
const gitlabService = await GitlabService.create(event.copilot);
122122
const userId = await gitlabService.getUserIdByLogin(event.copilot, assignedUser);
123-
await gitlabService.assignUser(event.copilot, event.data.repository, issueNumber, userId);
123+
await gitlabService.assignUser(event.data.repository, issueNumber, userId);
124124
}
125125
}
126126

@@ -139,7 +139,7 @@ class GitHelper {
139139
createCopilotPayments);
140140
} else if (event.provider === 'gitlab') {
141141
const gitlabService = await GitlabService.create(event.copilot);
142-
await gitlabService.markIssueAsPaid(event.copilot, event.data.repository, issueNumber, challengeUUID, existLabels, winner,
142+
await gitlabService.markIssueAsPaid(event.data.repository, issueNumber, challengeUUID, existLabels, winner,
143143
createCopilotPayments);
144144
} else if (event.provider === 'azure') {
145145
await azureService.markIssueAsPaid(event.copilot, event.data.repository.full_name, issueNumber, challengeUUID, existLabels);
@@ -171,7 +171,7 @@ class GitHelper {
171171
return await gitHubService.getUserIdByLogin(event.copilot, assignee);
172172
} else if (event.provider === 'gitlab') {
173173
const gitlabService = await GitlabService.create(event.copilot);
174-
return gitlabService.getUserIdByLogin(event.copilot, assignee);
174+
return gitlabService.getUserIdByLogin(assignee);
175175
}
176176
return null;
177177
}

utils/kafka-consumer.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ function tcxMessageHandler(messageSet, topic) {
4646
// The event should be a JSON object
4747
event = parsePayload(event);
4848
try {
49-
console.log(event);
5049
event.message.value.payload.value = JSON.parse(event.message.value.payload.value);
5150
} catch (e) {
5251
logger.error('Invalid message payload', e);

utils/notification.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
const config = require('config');
1111

1212
const kafkaSender = require('./kafka-sender');
13-
const topcoderApiHelper = require('./topcoder-api-helper');
1413
const logger = require('./logger');
1514

1615
const notification = {};
@@ -31,6 +30,7 @@ function getContent(repoPath) {
3130
}
3231

3332
notification.sendTokenExpiredAlert = async function sendTokenExpiredAlert(copilotHandle, repoPath, provider) {
33+
const topcoderApiHelper = await import('./topcoder-api-helper');
3434
const copilotId = await topcoderApiHelper.getTopcoderMemberId(copilotHandle);
3535
const notificationConfigs = config.MAIL_NOTICIATION;
3636
const content = getContent(repoPath);

utils/topcoder-api-helper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ async function createProject(projectName) {
6262
/**
6363
* Create a new challenge.
6464
* @param {Object} challenge the challenge to create
65-
* @returns {Number} the created challenge id
65+
* @returns {Promise<Number>} the created challenge id
6666
*/
6767
async function createChallenge(challenge) {
6868
const apiKey = await getM2Mtoken();
@@ -268,7 +268,7 @@ async function getProjectBillingAccountId(id) {
268268
/**
269269
* gets the topcoder user id from handle
270270
* @param {String} handle the topcoder handle
271-
* @returns {Number} the user id
271+
* @returns {Promise<Number>} the user id
272272
*/
273273
async function getTopcoderMemberId(handle) {
274274
try {

0 commit comments

Comments
 (0)