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

Commit 5a0fb34

Browse files
authored
Merge pull request #36 from afrisalyp/issue-256
Fix query issue.
2 parents 71d442d + af00378 commit 5a0fb34

File tree

2 files changed

+47
-51
lines changed

2 files changed

+47
-51
lines changed

services/IssueService.js

Lines changed: 6 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,7 @@ async function ensureChallengeExists(event, issue, create = true) {
6868
logger.debug(`Enter ensureChallengeExists. provider: ${issue.provider}`);
6969
logger.debug(`Enter ensureChallengeExists. repositoryId: ${issue.repositoryId}`);
7070

71-
let dbIssue = await dbHelper.queryOne(models.Issue, {
72-
number: issue.number,
73-
provider: issue.provider,
74-
repositoryId: issue.repositoryId
75-
});
71+
let dbIssue = await dbHelper.queryOneIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
7672
logger.debug(`DB Issue number: ${issue.number}`);
7773
logger.debug(`DB Issue provider: ${issue.provider}`);
7874
logger.debug(`DB Issue repository: ${issue.repositoryId}`);
@@ -82,23 +78,15 @@ async function ensureChallengeExists(event, issue, create = true) {
8278
}
8379
if (dbIssue && dbIssue.status === 'challenge_creation_failed') {
8480
// remove issue from db
85-
await dbHelper.remove(models.Issue, {
86-
number: issue.number,
87-
provider: issue.provider,
88-
repositoryId: issue.repositoryId
89-
}, true);
81+
await dbHelper.removeIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
9082
dbIssue = null;
9183
}
9284

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

9688
await handleIssueCreate(event, issue);
97-
dbIssue = await dbHelper.queryOne(models.Issue, {
98-
number: issue.number,
99-
provider: issue.provider,
100-
repositoryId: issue.repositoryId
101-
});
89+
dbIssue = await dbHelper.queryOneIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
10290
logger.debug(`dbIssue is CREATED ${dbIssue ? 'Succesfully' : 'Failed'}`);
10391
}
10492
return dbIssue;
@@ -551,11 +539,7 @@ async function handleIssueCreate(event, issue, recreate = false) {
551539
}// if existing found don't create a project
552540

553541
// Check if duplicated
554-
let dbIssue = await dbHelper.queryOne(models.Issue, {
555-
number: issue.number,
556-
provider: issue.provider,
557-
repositoryId: issue.repositoryId
558-
});
542+
let dbIssue = await dbHelper.queryOneIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
559543

560544
if (dbIssue) {
561545
throw new Error(
@@ -599,11 +583,7 @@ async function handleIssueCreate(event, issue, recreate = false) {
599583
});
600584
} catch (e) {
601585
logger.error(`Challenge creation failure: ${e}`);
602-
await dbHelper.remove(models.Issue, {
603-
number: issue.number,
604-
provider: issue.provider,
605-
repositoryId: issue.repositoryId
606-
}, true);
586+
await dbHelper.removeIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
607587
await eventService.handleEventGracefully(event, issue, e);
608588
return;
609589
}
@@ -745,11 +725,7 @@ async function handleIssueUnAssignment(event, issue) {
745725
* @private
746726
*/
747727
async function handleIssueRecreate(event, issue) {
748-
const dbIssue = await dbHelper.queryOne(models.Issue, {
749-
number: issue.number,
750-
provider: issue.provider,
751-
repositoryId: issue.repositoryId
752-
});
728+
const dbIssue = await dbHelper.queryOneIssue(models.Issue, issue.repositoryId, issue.number, issue.provider);
753729

754730
try {
755731
await dbIssue.delete();

utils/db-helper.js

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
* Copyright (c) 2018 TopCoder, Inc. All rights reserved.
33
*/
44
'use strict';
5-
const _ = require('lodash');
65
const logger = require('./logger');
76

87
/**
@@ -50,29 +49,33 @@ async function scan(model, scanParams) {
5049
/**
5150
* Get single data by query parameters
5251
* @param {Object} model The dynamoose model to query
53-
* @param {Object} params The parameters object
52+
* @param {String} repositoryId The repository id to query
53+
* @param {Number} number The number id to query
54+
* @param {String} provider The provider id to query
5455
* @returns {Promise<void>}
5556
*/
56-
async function queryOne(model, params) {
57+
async function queryOneIssue(model, repositoryId, number, provider) {
5758
logger.debug('Enter queryOne.');
5859

5960
return await new Promise((resolve, reject) => {
60-
const queryParams = {};
61-
62-
_.forOwn(params, (value, key) => {
63-
queryParams[key] = {eq: value};
64-
});
65-
66-
logger.debug(`${JSON.stringify(queryParams)}`);
67-
model.queryOne(queryParams).exec((err, result) => {
61+
logger.debug(`repositoryId : ${repositoryId}`);
62+
logger.debug(`number : ${number}`);
63+
logger.debug(`provider : ${provider}`);
64+
model.query('repositoryId').eq(repositoryId)
65+
.filter('number')
66+
.eq(number)
67+
.filter('provider')
68+
.eq(provider)
69+
.all()
70+
.exec((err, result) => {
6871
if (err) {
6972
logger.debug(`queryOne. Error. ${err}`);
7073
return reject(err);
7174
}
7275
logger.debug('queryOne. Result.');
7376
logger.debug(result);
7477

75-
return resolve(result);
78+
return resolve(result.count === 0 ? null : result[0]);
7679
});
7780
});
7881
}
@@ -163,15 +166,31 @@ async function update(Model, id, data) {
163166
* Delete item in database
164167
* @param {Object} Model The dynamoose model to delete
165168
* @param {Object} queryParams The query parameters object
166-
* @param {Boolean} withQuery Find the object with query instead of scan
167169
*/
168-
async function remove(Model, queryParams, withQuery = false) {
169-
let dbItem;
170-
if (withQuery) {
171-
dbItem = await queryOne(Model, queryParams);
172-
} else {
173-
dbItem = await scanOne(Model, queryParams);
174-
}
170+
async function remove(Model, queryParams) {
171+
const dbItem = await scanOne(Model, queryParams);
172+
await new Promise((resolve, reject) => {
173+
if (dbItem != null) {
174+
dbItem.delete((err) => {
175+
if (err) {
176+
return reject(err);
177+
}
178+
179+
return resolve(dbItem);
180+
});
181+
}
182+
});
183+
}
184+
185+
/**
186+
* Delete issue item in database
187+
* @param {Object} Model The dynamoose model to delete
188+
* @param {String} repositoryId The repository id to delete
189+
* @param {Number} number The number id to delete
190+
* @param {String} provider The provider id to delete
191+
*/
192+
async function removeIssue(Model, repositoryId, number, provider) {
193+
const dbItem = await queryOneIssue(Model, repositoryId, number, provider);
175194
await new Promise((resolve, reject) => {
176195
if (dbItem != null) {
177196
dbItem.delete((err) => {
@@ -193,5 +212,6 @@ module.exports = {
193212
create,
194213
update,
195214
remove,
196-
queryOne
215+
queryOneIssue,
216+
removeIssue
197217
};

0 commit comments

Comments
 (0)