Commit 5f0284e9 authored by raghu's avatar raghu
Browse files

Issue #SB-8572 feat : getorgdetails changes

parent 796fb59a
master dependabot/npm_and_yarn/src/async-2.6.4 dependabot/npm_and_yarn/src/decode-uri-component-0.2.2 dependabot/npm_and_yarn/src/flat-and-mocha-5.0.2 dependabot/npm_and_yarn/src/handlebars-4.7.7 dependabot/npm_and_yarn/src/jsonwebtoken-9.0.0 dependabot/npm_and_yarn/src/lodash-4.17.21 dependabot/npm_and_yarn/src/minimist-and-project-sunbird/telemetry-sdk-and-handlebars-and-mkdirp-1.2.8 release-3.6.0 release-4.3.0 release-4.8.0 release-5.2.0 release-5.3.0 release-5.6.0 release-6.0.0 v1.13.3 v1.13 v1.12 tmp-testPR tmp-sunbird-bootcamp tmp-rjshrjndrn-patch-1 tmp-revert-118-testPR tmp-revert-110-logs tmp-revert-99-revert-98-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-98-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-96-rjshrjndrn-patch-1 tmp-release-sonarcloud tmp-release-2.6.0 tmp-release-2.3.0 tmp-release-2.1.1 tmp-release-2.1.0 tmp-release-2.1.0_pluginSearch tmp-release-2.0.0 tmp-release-1.15 tmp-release-1.14.3 tmp-release-1.14 tmp-release-1.14-sp3 tmp-refactored-dev-deploy tmp-master tmp-loadtest tmp-load-testing tmp-jenkins-test tmp-jenkins-pipeline tmp-final-variable-refac tmp-dial-assemble-api tmp-content-update-read tmp-circleci release-5.6.0_RC1 release-5.2.0_RC1 release-4.8.5_RC1 release-4.8.0_RC2 release-4.8.0_RC1 release-4.3.0_RC1 release-3.8.0_RC3 release-3.8.0_RC2 release-3.8.0_RC1 release-3.7.0_RC2 release-3.7.0_RC1 release-3.6.0_RC1 release-3.2.0_RC2 release-3.2.0_RC1 release-3.1.0 release-3.1.0_RC2 release-3.1.0_RC1 release-3.0.1_RC1 release-3.0.0 release-3.0.0_RC1 release-2.10.0 release-2.10.0_RC2 release-2.10.0_RC1 release-2.9.0_RC3 release-2.9.0_RC2 release-2.9.0_RC1 release-2.8.0 release-2.8.0_RC4 release-2.8.0_RC3 release-2.8.0_RC2 release-2.8.0_RC1 release-2.7.0 release-2.7.0_RC2 release-2.7.0_RC1 release-2.6.0 release-2.6.0_RC4 release-2.6.0_RC3 release-2.6.0_RC2 release-2.6.0_RC1 release-2.3.0 release-2.3.0_RC2 release-2.3.0_RC1 release-2.1.1_RC1 release-2.1.0_RC2 release-2.1.0_RC1 release-2.0.0 release-2.0.0_RC5 release-2.0.0_RC4 release-2.0.0_RC3 release-2.0.0_RC2 release-2.0.0_RC1 release-1.15.0 release-1.15_RC7 release-1.15_RC6 release-1.15_RC5 release-1.15_RC4 release-1.15_RC3 release-1.15_RC2 release-1.15_RC1 release-1.14.0
No related merge requests found
Showing with 102 additions and 30 deletions
+102 -30
{ {
"orgCacheKeyName": "allRootOrgs",
"orgCacheExpiryTime": 1800, "orgCacheExpiryTime": 1800,
"orgfieldsAllowedToSend": ["email","orgName"] "orgfieldsAllowedToSend": ["email","orgName"],
"orgCacheKeyNamePrefix" : "orgdata-"
} }
\ No newline at end of file
...@@ -7,6 +7,7 @@ var _ = require('lodash') ...@@ -7,6 +7,7 @@ var _ = require('lodash')
var CacheManager = require('sb_cache_manager') var CacheManager = require('sb_cache_manager')
var cacheManager = new CacheManager({}) var cacheManager = new CacheManager({})
var configData = require('../config/constants') var configData = require('../config/constants')
var async = require('async')
/** /**
* This function executes the org search lms API to get all orgs * This function executes the org search lms API to get all orgs
...@@ -17,39 +18,46 @@ function getRootOrgs (requestObj, cb) { ...@@ -17,39 +18,46 @@ function getRootOrgs (requestObj, cb) {
LOG.info(utilsService.getLoggerData({}, 'INFO', LOG.info(utilsService.getLoggerData({}, 'INFO',
filename, 'getRootOrgs', 'getRootOrgs called', requestObj)) filename, 'getRootOrgs', 'getRootOrgs called', requestObj))
contentProvider.getAllRootOrgs(requestObj, (err, res) => { contentProvider.getAllRootOrgs(requestObj, (err, res) => {
if (!err && res && res.result.response.count > 0 && res.result.response.content) { if (!err) {
return cb(err, res) return cb(err, res)
} else { } else {
LOG.error(utilsService.getLoggerData({}, 'ERROR', LOG.error(utilsService.getLoggerData({}, 'ERROR',
filename, 'getRootOrgs', 'error in getting root orgs.', err)) filename, 'getRootOrgs', 'error in getting root orgs.', err))
process.exit(1) return cb(err)
} }
}) })
} }
/** /**
* This function tries to get the orgdetails from cache if not exits fetches from api and sets to cache * This function tries to get the orgdetails from cache if not exits fetches from api and sets to cache
* @param requestObj is not needed bec all rootorgdetails are fetched here * @param requestObj is filter query that is sent to fetch org api call, tryfromcache is a boolean flag,
inputdata is array of contents that needs org data
* @param CBW callback after success or error * @param CBW callback after success or error
*/ */
function getRootOrgsFromCache (cb) { function getRootOrgsFromCache (orgfetchquery, tryfromcache, inputdata, cb) {
cacheManager.get(configData.orgCacheKeyName, function (err, cachedata) { async.waterfall([
if (err || !cachedata) { function (CBW) {
var inputObj = { if (tryfromcache) {
'request': { var keyNames = getKeyNames(inputdata)
'filters': { 'isRootOrg': true } cacheManager.mget(keyNames, function (err, cacheresponse) {
} var cachedata = _.compact(cacheresponse)
if (!err && _.size(cachedata) > 0) {
return cb(null, cachedata)
} else {
CBW()
}
})
} else {
CBW()
} }
getRootOrgs(inputObj, function (err, res) { },
function (CBW) {
getRootOrgs(orgfetchquery, function (err, res) {
if (err) { if (err) {
return cb(err) return cb(err)
} else { } else {
var cacheinputdata = { var cacheinputdata = prepareCacheDataToInsert(res.result.response.content)
key: configData.orgCacheKeyName, cacheManager.mset({data: cacheinputdata, ttl: configData.orgCacheExpiryTime}, function (err, data) {
value: res.result.response.content,
ttl: configData.orgCacheExpiryTime
}
cacheManager.set(cacheinputdata, function (err, data) {
if (err) { if (err) {
LOG.error(utilsService.getLoggerData({}, 'ERROR', filename, 'Setting allRootOrgs cache failed', LOG.error(utilsService.getLoggerData({}, 'ERROR', filename, 'Setting allRootOrgs cache failed',
'Setting allRootOrgs cache data failed', err)) 'Setting allRootOrgs cache data failed', err))
...@@ -57,14 +65,12 @@ function getRootOrgsFromCache (cb) { ...@@ -57,14 +65,12 @@ function getRootOrgsFromCache (cb) {
LOG.info(utilsService.getLoggerData({}, 'INFO', filename, LOG.info(utilsService.getLoggerData({}, 'INFO', filename,
'Setting allRootOrgs cache data success')) 'Setting allRootOrgs cache data success'))
} }
return cb(null, res.result.response.content)
}) })
return cb(null, res.result.response.content)
} }
}) })
} else {
return cb(null, cachedata)
} }
}) ])
} }
/** /**
...@@ -76,18 +82,59 @@ function populateOrgDetailsByHasTag (inputdata, inputfields, cb) { ...@@ -76,18 +82,59 @@ function populateOrgDetailsByHasTag (inputdata, inputfields, cb) {
inputfields = inputfields.split(',') inputfields = inputfields.split(',')
var fieldsToPopulate = configData.orgfieldsAllowedToSend.filter(eachfield => inputfields.includes(eachfield)) var fieldsToPopulate = configData.orgfieldsAllowedToSend.filter(eachfield => inputfields.includes(eachfield))
if (_.size(fieldsToPopulate) > 0 && _.size(inputdata) > 0) { if (_.size(fieldsToPopulate) > 0 && _.size(inputdata) > 0) {
getRootOrgsFromCache(function (err, orgdata) { var orgDetails = []
if (!err && orgdata) { var orgFetchQuery = {
var orgDetails = _.keyBy(orgdata, 'hashTagId') 'request': {
'filters': { 'isRootOrg': true }
}
}
var tryFromCache = true
async.waterfall([
// intially fetch all the orgs till the default limit
function (CBW) {
getRootOrgsFromCache(orgFetchQuery, tryFromCache, inputdata, function (err, orgdata) {
if (!err && orgdata) {
orgDetails = orgdata
return CBW()
} else {
return cb(null, inputdata)
}
})
},
// fetch the orgs which are not fetched from initial api call
function (CBW) {
var inputHashTagIds = _.uniq(_.map(inputdata, 'channel'))
var fetchedhashTagIds = _.uniq(_.map(orgDetails, 'hashTagId'))
// diff of channels which doesnt exists in inital fetch
var hasTagIdsNeedToFetch = _.difference(inputHashTagIds, fetchedhashTagIds)
orgFetchQuery.request.filters.hashTagId = hasTagIdsNeedToFetch
if (hasTagIdsNeedToFetch.length) {
// fetch directly from api , as hashTagIdsNeedToFetch are the data which are not found from first api query
tryFromCache = false
getRootOrgsFromCache(orgFetchQuery, tryFromCache, inputdata, function (err, orgdata) {
if (!err && orgdata) {
orgDetails = _.concat(orgDetails, orgdata)
return CBW()
} else {
return cb(null, inputdata)
}
})
} else {
CBW()
}
},
// mapping channel with orgdetails in inputdata
function (CBW) {
var orgDetailsWithKey = _.keyBy(orgDetails, 'hashTagId')
_.forEach(inputdata, (eachcontent, index) => { _.forEach(inputdata, (eachcontent, index) => {
if (eachcontent.channel) { if (eachcontent.channel) {
var eachorgdetail = orgDetails[eachcontent.channel] var eachorgdetail = orgDetailsWithKey[eachcontent.channel]
inputdata[index].orgDetails = eachorgdetail ? _.pick(eachorgdetail, fieldsToPopulate) : {} inputdata[index].orgDetails = eachorgdetail ? _.pick(eachorgdetail, fieldsToPopulate) : {}
} }
}) })
}; return cb(null, inputdata)
return cb(null, inputdata) }
}) ])
} else { } else {
return cb(null, inputdata) return cb(null, inputdata)
} }
...@@ -116,6 +163,31 @@ function includeOrgDetails (req, res, cb) { ...@@ -116,6 +163,31 @@ function includeOrgDetails (req, res, cb) {
} }
} }
// prepares the set data for inserting in cache
function prepareCacheDataToInsert (data) {
var cacheKeyValuePairs = []
_.forEach(data, function (eachdata) {
if (eachdata.hashTagId) {
var keyname = configData.orgCacheKeyNamePrefix + eachdata.hashTagId
cacheKeyValuePairs.push(keyname)
cacheKeyValuePairs.push(eachdata)
}
})
return cacheKeyValuePairs
}
// prepares the get data for fetching from cache
function getKeyNames (data) {
var keyNames = []
_.forEach(data, function (eachdata) {
if (eachdata.channel) {
var keyname = configData.orgCacheKeyNamePrefix + eachdata.channel
keyNames.push(keyname)
}
})
return _.uniq(keyNames)
}
module.exports = { module.exports = {
getRootOrgs: getRootOrgs, getRootOrgs: getRootOrgs,
includeOrgDetails: includeOrgDetails, includeOrgDetails: includeOrgDetails,
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment