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

Commit f0fdfee

Browse files
authored
Merge pull request #74 from afrisalyp/develop
Cleanup august challenge.
2 parents d34a076 + dd69db3 commit f0fdfee

File tree

4 files changed

+81
-17
lines changed

4 files changed

+81
-17
lines changed

models/Project.js

-6
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,12 @@ const schema = new Schema({
2323
type: Number,
2424
required: true
2525
},
26-
repoUrls: {
27-
type: [String],
28-
required: true
29-
},
30-
repoId: {type: String, required: false},
3126
rocketChatWebhook: {type: String, required: false},
3227
rocketChatChannelName: {type: String, required: false},
3328
archived: {type: String, required: true},
3429
owner: {type: String, required: true},
3530
secretWebhookKey: {type: String, required: true},
3631
copilot: {type: String, required: false},
37-
registeredWebhookId: {type: String, required: false},
3832
updatedAt: {
3933
type: Date,
4034
default: Date.now

models/Repository.js

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
3+
*/
4+
'use strict';
5+
6+
/**
7+
* Schema for project and repository mapping.
8+
* @author TCSCODER
9+
* @version 1.0
10+
*/
11+
const dynamoose = require('dynamoose');
12+
13+
const Schema = dynamoose.Schema;
14+
15+
const schema = new Schema({
16+
id: {
17+
type: String,
18+
hashKey: true,
19+
required: true
20+
},
21+
projectId: {
22+
type: String,
23+
required: true,
24+
index: {
25+
global: true,
26+
project: true,
27+
name: 'ProjectIdIndex'
28+
}
29+
},
30+
url: {
31+
type: String,
32+
required: true,
33+
index: {
34+
global: true,
35+
project: true,
36+
rangKey: 'archived',
37+
name: 'URLIndex'
38+
}
39+
},
40+
archived: {type: String, required: true},
41+
repoId: {type: String, required: false},
42+
registeredWebhookId: {type: String, required: false}
43+
});
44+
45+
module.exports = schema;

models/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ const models = {
4040
User: dynamoose.model('Topcoder_X.User', require('./User')),
4141
CopilotPayment: dynamoose.model('Topcoder_X.CopilotPayment', require('./CopilotPayment')),
4242
GithubUserMapping: dynamoose.model('Topcoder_X.GithubUserMapping', require('./GithubUserMapping')),
43-
GitlabUserMapping: dynamoose.model('Topcoder_X.GitlabUserMapping', require('./GitlabUserMapping'))
43+
GitlabUserMapping: dynamoose.model('Topcoder_X.GitlabUserMapping', require('./GitlabUserMapping')),
44+
Repository: dynamoose.model('Topcoder_X.Repository', require('./Repository'))
4445
};
4546
/* eslint-enable global-require */
4647

utils/db-helper.js

+34-10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
33
*/
44
'use strict';
5+
const models = require('../models');
56
const logger = require('./logger');
67

78
/**
@@ -81,16 +82,16 @@ async function queryOneIssue(model, repositoryId, number, provider) {
8182
*/
8283
async function queryOneActiveProject(model, repoUrl) {
8384
return await new Promise((resolve, reject) => {
84-
model.scan('repoUrls').contains(repoUrl)
85-
.filter('archived')
86-
.eq('false')
87-
.all()
88-
.exec((err, result) => {
89-
if (err || !result) {
90-
logger.debug(`queryOneActiveProject. Error. ${err}`);
91-
return reject(err);
92-
}
93-
return resolve(result.count === 0 ? null : result[0]);
85+
queryOneActiveRepository(models.Repository, repoUrl).then((repo) => {
86+
if (!repo) resolve(null);
87+
else model.queryOne('id').eq(repo.projectId).consistent()
88+
.exec((err, result) => {
89+
if (err) {
90+
logger.debug(`queryOneActiveProject. Error. ${err}`);
91+
return reject(err);
92+
}
93+
return resolve(result);
94+
});
9495
});
9596
});
9697
}
@@ -319,13 +320,36 @@ async function removeIssue(Model, repositoryId, number, provider) {
319320
});
320321
}
321322

323+
/**
324+
* Query one active repository
325+
* @param {Object} model the dynamoose model
326+
* @param {String} url the repository url
327+
* @returns {Promise<Object>}
328+
*/
329+
async function queryOneActiveRepository(model, url) {
330+
return await new Promise((resolve, reject) => {
331+
model.queryOne({
332+
url,
333+
archived: 'false'
334+
})
335+
.all()
336+
.exec((err, result) => {
337+
if (err) {
338+
return reject(err);
339+
}
340+
return resolve(result);
341+
});
342+
});
343+
}
344+
322345
module.exports = {
323346
getById,
324347
scan,
325348
updateMany,
326349
create,
327350
update,
328351
queryOneActiveProject,
352+
queryOneActiveRepository,
329353
queryOneIssue,
330354
queryOneUserByType,
331355
queryOneUserMappingByGithubUserId,

0 commit comments

Comments
 (0)