Skip to content

Commit

Permalink
changes per comments
Browse files Browse the repository at this point in the history
  • Loading branch information
pallavi2209 committed Mar 1, 2017
1 parent 8a42059 commit 150c685
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 46 deletions.
20 changes: 17 additions & 3 deletions api/v1/controllers/samples.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/**
* api/v1/controllers/samples.js
*/
'use strict';
'use strict'; // eslint-disable-line strict

const featureToggles = require('feature-toggles');

Expand Down Expand Up @@ -53,7 +53,13 @@ module.exports = {
*/
findSamples(req, res, next) {
if (featureToggles.isFeatureEnabled(constants.featureName)) {
redisModelSample.findSamplesFromRedis(req, res, next);
const resultObj = { reqStartTime: new Date() }; // for logging
redisModelSample.findSamplesFromRedis(resultObj, res.method)
.then((response) => {
u.logAPI(req, resultObj, response); // audit log
res.status(httpStatus.OK).json(response);
})
.catch((err) => u.handleError(next, err, helper.modelName));
} else {
doFind(req, res, next, helper);
}
Expand All @@ -70,7 +76,15 @@ module.exports = {
*/
getSample(req, res, next) {
if (featureToggles.isFeatureEnabled(constants.featureName)) {
redisModelSample.getSampleFromRedis(req, res, next);
const resultObj = { reqStartTime: new Date() }; // for logging
const sampleName = req.swagger.params.key.value.toLowerCase();

redisModelSample.getSampleFromRedis(sampleName, resultObj, res.method)
.then((sampleRes) => {
u.logAPI(req, resultObj, sampleRes); // audit log
res.status(httpStatus.OK).json(sampleRes);
})
.catch((err) => u.handleError(next, err, helper.modelName));
} else {
doGet(req, res, next, helper);
}
Expand Down
58 changes: 22 additions & 36 deletions cache/models/samples.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

const helper = require('../../api/v1/helpers/nouns/samples');
const u = require('../../api/v1/helpers/verbs/utils');
const httpStatus = require('../../api/v1/constants').httpStatus;
const sampleStore = require('../sampleStore');
const redisClient = require('../redisCache').client.sampleStore;
const constants = sampleStore.constants;
Expand Down Expand Up @@ -52,14 +51,12 @@ module.exports = {

/**
* Retrieves the sample from redis and sends it back in the response.
*
* @param {IncomingMessage} req - The request object
* @param {ServerResponse} res - The response object
* @param {Function} next - The next middleware function in the stack
* @param {string} sampleName - Sample name
* @param {Object} logObject - Log object
* @param {String} method - Type of request method
* @returns {Promise} - Resolves to a sample object
*/
getSampleFromRedis(req, res, next) {
const resultObj = { reqStartTime: new Date() }; // for logging
const sampleName = req.swagger.params.key.value.toLowerCase();
getSampleFromRedis(sampleName, logObject, method) {
const aspectName = sampleName.split('|')[ONE];
const commands = [];

Expand All @@ -75,42 +72,36 @@ module.exports = {
sampleStore.toKey(constants.objectType.aspect, aspectName),
]);

redisClient.batch(commands).execAsync()
return redisClient.batch(commands).execAsync()
.then((responses) => {
resultObj.dbTime = new Date() - resultObj.reqStartTime; // log db time
logObject.dbTime = new Date() - logObject.reqStartTime; // log db time

// clean and attach aspect to sample
const sampleRes = cleanAddAspectToSample(
responses[ZERO], responses[ONE], res.method
responses[ZERO], responses[ONE], method
);

u.logAPI(req, resultObj, sampleRes); // audit log
res.status(httpStatus.OK).json(sampleRes);
})
.catch((err) => u.handleError(next, err, helper.modelName));
return sampleRes;
});
},

/**
* Finds zero or more samples from redis and sends them back in the response.
*
* @param {IncomingMessage} req - The request object
* @param {ServerResponse} res - The response object
* @param {Function} next - The next middleware function in the stack
* @param {Object} logObject - Log object
* @param {String} method - Type of request method
* @returns {Promise} - Resolves to a list of all samples objects
*/
findSamplesFromRedis(req, res, next) {
const resultObj = { reqStartTime: new Date() }; // for logging
findSamplesFromRedis(logObject, method) {
const sampleCmds = [];
const aspectCmds = [];
const response = [];

// get all Samples sorted lexicographically
redisClient.sortAsync(constants.indexKey.sample, 'alpha')
return redisClient.sortAsync(constants.indexKey.sample, 'alpha')
.then((allSampleKeys) => {
// add to commands to get sample
allSampleKeys.forEach((sampleName) => {
sampleCmds.push(
['hgetall', sampleName.toLowerCase()]
);
sampleCmds.push(['hgetall', sampleName]);
});

// get all aspect names
Expand All @@ -119,9 +110,7 @@ module.exports = {
.then((allAspectKeys) => {
// add to commands to get aspect
allAspectKeys.forEach((aspectName) => {
aspectCmds.push(
['hgetall', aspectName.toLowerCase()]
);
aspectCmds.push(['hgetall', aspectName]);
});

// get all samples and aspects
Expand All @@ -131,7 +120,7 @@ module.exports = {
]);
})
.then((sampleAndAspects) => {
resultObj.dbTime = new Date() - resultObj.reqStartTime; // log db time
logObject.dbTime = new Date() - logObject.reqStartTime; // log db time
const samples = sampleAndAspects[ZERO];
const aspects = sampleAndAspects[ONE];

Expand All @@ -141,15 +130,12 @@ module.exports = {
);

const sampleRes = cleanAddAspectToSample(
sampleObj, sampleAspect, res.method
sampleObj, sampleAspect, method
);
response.push(sampleRes); // add sample to response
});
})
.then(() => {
u.logAPI(req, resultObj, response); // audit log
res.status(httpStatus.OK).json(response);
})
.catch((err) => u.handleError(next, err, helper.modelName));

return response;
});
},
};
12 changes: 5 additions & 7 deletions cache/sampleStore.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,16 @@ function toKey(type, name) {
} // toKey

/**
* Convert array strings to json from redis object
* Convert array strings to json from redis object. For each array field,
* if that field exists in obj and its and array, then json parse.
* @param {Object} obj - Object to convert
* @param {Object} arrayFields - List of array fields which were stringified.
* @returns {Object} - Converted object
*/
function arrayStringsToJson(obj, arrayFields) {
Object.keys(obj).forEach((key) => {
// Some array fields might have already been parsed in previous calls
// because of pass-by-reference behaviour of object, hence array check
if (arrayFields.includes(key) && (!Array.isArray(obj[key]))) {
obj[key] = JSON.parse(obj[key]);
arrayFields.forEach((field) => {
if (obj[field] && !Array.isArray(obj[field])) {
obj[field] = JSON.parse(obj[field]);
}
});
return obj;
Expand Down Expand Up @@ -111,7 +110,6 @@ function cleanSample(s) {
return retval;
} // cleanSample


module.exports = {
cleanAspect,
cleanSample,
Expand Down

0 comments on commit 150c685

Please sign in to comment.