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

Commit 1f5bb2b

Browse files
committed
Fetch Issue with query.
1 parent b40a5b0 commit 1f5bb2b

File tree

2 files changed

+47
-9
lines changed

2 files changed

+47
-9
lines changed

services/IssueService.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +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.scanOne(models.Issue, {
71+
let dbIssue = await dbHelper.queryOne(models.Issue, {
7272
number: issue.number,
7373
provider: issue.provider,
7474
repositoryId: issue.repositoryId
@@ -86,15 +86,15 @@ async function ensureChallengeExists(event, issue, create = true) {
8686
number: issue.number,
8787
provider: issue.provider,
8888
repositoryId: issue.repositoryId
89-
});
89+
}, true);
9090
dbIssue = null;
9191
}
9292

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

9696
await handleIssueCreate(event, issue);
97-
dbIssue = await dbHelper.scanOne(models.Issue, {
97+
dbIssue = await dbHelper.queryOne(models.Issue, {
9898
number: issue.number,
9999
provider: issue.provider,
100100
repositoryId: issue.repositoryId
@@ -551,7 +551,7 @@ async function handleIssueCreate(event, issue, recreate = false) {
551551
}// if existing found don't create a project
552552

553553
// Check if duplicated
554-
let dbIssue = await dbHelper.scanOne(models.Issue, {
554+
let dbIssue = await dbHelper.queryOne(models.Issue, {
555555
number: issue.number,
556556
provider: issue.provider,
557557
repositoryId: issue.repositoryId
@@ -603,7 +603,7 @@ async function handleIssueCreate(event, issue, recreate = false) {
603603
number: issue.number,
604604
provider: issue.provider,
605605
repositoryId: issue.repositoryId
606-
});
606+
}, true);
607607
await eventService.handleEventGracefully(event, issue, e);
608608
return;
609609
}
@@ -745,7 +745,7 @@ async function handleIssueUnAssignment(event, issue) {
745745
* @private
746746
*/
747747
async function handleIssueRecreate(event, issue) {
748-
const dbIssue = await dbHelper.scanOne(models.Issue, {
748+
const dbIssue = await dbHelper.queryOne(models.Issue, {
749749
number: issue.number,
750750
provider: issue.provider,
751751
repositoryId: issue.repositoryId

utils/db-helper.js

Lines changed: 41 additions & 3 deletions
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 _ = require('lodash');
56
const logger = require('./logger');
67

78
/**
@@ -46,6 +47,36 @@ async function scan(model, scanParams) {
4647
});
4748
}
4849

50+
/**
51+
* Get single data by query parameters
52+
* @param {Object} model The dynamoose model to query
53+
* @param {Object} params The parameters object
54+
* @returns {Promise<void>}
55+
*/
56+
async function queryOne(model, params) {
57+
logger.debug('Enter queryOne.');
58+
59+
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) => {
68+
if (err) {
69+
logger.debug(`queryOne. Error. ${err}`);
70+
return reject(err);
71+
}
72+
logger.debug('queryOne. Result.');
73+
logger.debug(result);
74+
75+
return resolve(result);
76+
});
77+
});
78+
}
79+
4980
/**
5081
* Get single data by scan parameters
5182
* @param {Object} model The dynamoose model to scan
@@ -132,9 +163,15 @@ async function update(Model, id, data) {
132163
* Delete item in database
133164
* @param {Object} Model The dynamoose model to delete
134165
* @param {Object} queryParams The query parameters object
166+
* @param {Boolean} withQuery Find the object with query instead of scan
135167
*/
136-
async function remove(Model, queryParams) {
137-
const dbItem = await scanOne(Model, queryParams);
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+
}
138175
await new Promise((resolve, reject) => {
139176
if (dbItem != null) {
140177
dbItem.delete((err) => {
@@ -155,5 +192,6 @@ module.exports = {
155192
updateMany,
156193
create,
157194
update,
158-
remove
195+
remove,
196+
queryOne
159197
};

0 commit comments

Comments
 (0)