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

Fix query issue. #36

Merged
merged 1 commit into from
Nov 26, 2019
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
36 changes: 6 additions & 30 deletions services/IssueService.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,7 @@ async function ensureChallengeExists(event, issue, create = true) {
logger.debug(`Enter ensureChallengeExists. provider: ${issue.provider}`);
logger.debug(`Enter ensureChallengeExists. repositoryId: ${issue.repositoryId}`);

let dbIssue = await dbHelper.queryOne(models.Issue, {
number: issue.number,
provider: issue.provider,
repositoryId: issue.repositoryId
});
let dbIssue = await dbHelper.queryOneIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
logger.debug(`DB Issue number: ${issue.number}`);
logger.debug(`DB Issue provider: ${issue.provider}`);
logger.debug(`DB Issue repository: ${issue.repositoryId}`);
Expand All @@ -82,23 +78,15 @@ async function ensureChallengeExists(event, issue, create = true) {
}
if (dbIssue && dbIssue.status === 'challenge_creation_failed') {
// remove issue from db
await dbHelper.remove(models.Issue, {
number: issue.number,
provider: issue.provider,
repositoryId: issue.repositoryId
}, true);
await dbHelper.removeIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
dbIssue = null;
}

if (!dbIssue && create) {
logger.debug('dbIssue is NULL, process to create new record and challenge');

await handleIssueCreate(event, issue);
dbIssue = await dbHelper.queryOne(models.Issue, {
number: issue.number,
provider: issue.provider,
repositoryId: issue.repositoryId
});
dbIssue = await dbHelper.queryOneIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
logger.debug(`dbIssue is CREATED ${dbIssue ? 'Succesfully' : 'Failed'}`);
}
return dbIssue;
Expand Down Expand Up @@ -551,11 +539,7 @@ async function handleIssueCreate(event, issue, recreate = false) {
}// if existing found don't create a project

// Check if duplicated
let dbIssue = await dbHelper.queryOne(models.Issue, {
number: issue.number,
provider: issue.provider,
repositoryId: issue.repositoryId
});
let dbIssue = await dbHelper.queryOneIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);

if (dbIssue) {
throw new Error(
Expand Down Expand Up @@ -599,11 +583,7 @@ async function handleIssueCreate(event, issue, recreate = false) {
});
} catch (e) {
logger.error(`Challenge creation failure: ${e}`);
await dbHelper.remove(models.Issue, {
number: issue.number,
provider: issue.provider,
repositoryId: issue.repositoryId
}, true);
await dbHelper.removeIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
await eventService.handleEventGracefully(event, issue, e);
return;
}
Expand Down Expand Up @@ -745,11 +725,7 @@ async function handleIssueUnAssignment(event, issue) {
* @private
*/
async function handleIssueRecreate(event, issue) {
const dbIssue = await dbHelper.queryOne(models.Issue, {
number: issue.number,
provider: issue.provider,
repositoryId: issue.repositoryId
});
const dbIssue = await dbHelper.queryOneIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);

try {
await dbIssue.delete();
Expand Down
62 changes: 41 additions & 21 deletions utils/db-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
*/
'use strict';
const _ = require('lodash');
const logger = require('./logger');

/**
Expand Down Expand Up @@ -50,29 +49,33 @@ async function scan(model, scanParams) {
/**
* Get single data by query parameters
* @param {Object} model The dynamoose model to query
* @param {Object} params The parameters object
* @param {String} repositoryId The repository id to query
* @param {Number} number The number id to query
* @param {String} provider The provider id to query
* @returns {Promise<void>}
*/
async function queryOne(model, params) {
async function queryOneIssue(model, repositoryId, number, provider) {
logger.debug('Enter queryOne.');

return await new Promise((resolve, reject) => {
const queryParams = {};

_.forOwn(params, (value, key) => {
queryParams[key] = {eq: value};
});

logger.debug(`${JSON.stringify(queryParams)}`);
model.queryOne(queryParams).exec((err, result) => {
logger.debug(`repositoryId : ${repositoryId}`);
logger.debug(`number : ${number}`);
logger.debug(`provider : ${provider}`);
model.query('repositoryId').eq(repositoryId)
.filter('number')
.eq(number)
.filter('provider')
.eq(provider)
.all()
.exec((err, result) => {
if (err) {
logger.debug(`queryOne. Error. ${err}`);
return reject(err);
}
logger.debug('queryOne. Result.');
logger.debug(result);

return resolve(result);
return resolve(result.count === 0 ? null : result[0]);
});
});
}
Expand Down Expand Up @@ -163,15 +166,31 @@ async function update(Model, id, data) {
* Delete item in database
* @param {Object} Model The dynamoose model to delete
* @param {Object} queryParams The query parameters object
* @param {Boolean} withQuery Find the object with query instead of scan
*/
async function remove(Model, queryParams, withQuery = false) {
let dbItem;
if (withQuery) {
dbItem = await queryOne(Model, queryParams);
} else {
dbItem = await scanOne(Model, queryParams);
}
async function remove(Model, queryParams) {
const dbItem = await scanOne(Model, queryParams);
await new Promise((resolve, reject) => {
if (dbItem != null) {
dbItem.delete((err) => {
if (err) {
return reject(err);
}

return resolve(dbItem);
});
}
});
}

/**
* Delete issue item in database
* @param {Object} Model The dynamoose model to delete
* @param {String} repositoryId The repository id to delete
* @param {Number} number The number id to delete
* @param {String} provider The provider id to delete
*/
async function removeIssue(Model, repositoryId, number, provider) {
const dbItem = await queryOneIssue(Model, repositoryId, number, provider);
await new Promise((resolve, reject) => {
if (dbItem != null) {
dbItem.delete((err) => {
Expand All @@ -193,5 +212,6 @@ module.exports = {
create,
update,
remove,
queryOne
queryOneIssue,
removeIssue
};