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

Cleanup august challenge. #74

Merged
merged 1 commit into from
Aug 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions models/Project.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,12 @@ const schema = new Schema({
type: Number,
required: true
},
repoUrls: {
type: [String],
required: true
},
repoId: {type: String, required: false},
rocketChatWebhook: {type: String, required: false},
rocketChatChannelName: {type: String, required: false},
archived: {type: String, required: true},
owner: {type: String, required: true},
secretWebhookKey: {type: String, required: true},
copilot: {type: String, required: false},
registeredWebhookId: {type: String, required: false},
updatedAt: {
type: Date,
default: Date.now
Expand Down
45 changes: 45 additions & 0 deletions models/Repository.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
*/
'use strict';

/**
* Schema for project and repository mapping.
* @author TCSCODER
* @version 1.0
*/
const dynamoose = require('dynamoose');

const Schema = dynamoose.Schema;

const schema = new Schema({
id: {
type: String,
hashKey: true,
required: true
},
projectId: {
type: String,
required: true,
index: {
global: true,
project: true,
name: 'ProjectIdIndex'
}
},
url: {
type: String,
required: true,
index: {
global: true,
project: true,
rangKey: 'archived',
name: 'URLIndex'
}
},
archived: {type: String, required: true},
repoId: {type: String, required: false},
registeredWebhookId: {type: String, required: false}
});

module.exports = schema;
3 changes: 2 additions & 1 deletion models/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ const models = {
User: dynamoose.model('Topcoder_X.User', require('./User')),
CopilotPayment: dynamoose.model('Topcoder_X.CopilotPayment', require('./CopilotPayment')),
GithubUserMapping: dynamoose.model('Topcoder_X.GithubUserMapping', require('./GithubUserMapping')),
GitlabUserMapping: dynamoose.model('Topcoder_X.GitlabUserMapping', require('./GitlabUserMapping'))
GitlabUserMapping: dynamoose.model('Topcoder_X.GitlabUserMapping', require('./GitlabUserMapping')),
Repository: dynamoose.model('Topcoder_X.Repository', require('./Repository'))
};
/* eslint-enable global-require */

Expand Down
44 changes: 34 additions & 10 deletions utils/db-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
*/
'use strict';
const models = require('../models');
const logger = require('./logger');

/**
Expand Down Expand Up @@ -81,16 +82,16 @@ async function queryOneIssue(model, repositoryId, number, provider) {
*/
async function queryOneActiveProject(model, repoUrl) {
return await new Promise((resolve, reject) => {
model.scan('repoUrls').contains(repoUrl)
.filter('archived')
.eq('false')
.all()
.exec((err, result) => {
if (err || !result) {
logger.debug(`queryOneActiveProject. Error. ${err}`);
return reject(err);
}
return resolve(result.count === 0 ? null : result[0]);
queryOneActiveRepository(models.Repository, repoUrl).then((repo) => {
if (!repo) resolve(null);
else model.queryOne('id').eq(repo.projectId).consistent()
.exec((err, result) => {
if (err) {
logger.debug(`queryOneActiveProject. Error. ${err}`);
return reject(err);
}
return resolve(result);
});
});
});
}
Expand Down Expand Up @@ -319,13 +320,36 @@ async function removeIssue(Model, repositoryId, number, provider) {
});
}

/**
* Query one active repository
* @param {Object} model the dynamoose model
* @param {String} url the repository url
* @returns {Promise<Object>}
*/
async function queryOneActiveRepository(model, url) {
return await new Promise((resolve, reject) => {
model.queryOne({
url,
archived: 'false'
})
.all()
.exec((err, result) => {
if (err) {
return reject(err);
}
return resolve(result);
});
});
}

module.exports = {
getById,
scan,
updateMany,
create,
update,
queryOneActiveProject,
queryOneActiveRepository,
queryOneIssue,
queryOneUserByType,
queryOneUserMappingByGithubUserId,
Expand Down