An error occurred while loading the file. Please try again.
-
raghu authoredcc3b28ab
var path = require('path')
var filename = path.basename(__filename)
var utilsService = require('../service/utilsService')
var LOG = require('sb_logger_util')
const contentProvider = require('sb_content_provider_util')
var _ = require('lodash')
var CacheManager = require('sb_cache_manager')
var cacheManager = new CacheManager({})
var configData = require('../config/constants')
/**
* This function executes the org search lms API to get all orgs
* @param requestObj js object which contains the search request with filters,offset,limit,query etc
* @param cb callback after success or error
*/
function getRootOrgs (requestObj, cb) {
LOG.info(utilsService.getLoggerData({}, 'INFO',
filename, 'getRootOrgs', 'getRootOrgs called', requestObj))
contentProvider.getAllRootOrgs(requestObj, (err, res) => {
if (!err && res && res.result.response.count > 0 && res.result.response.content) {
cb(err, res)
} else {
LOG.error(utilsService.getLoggerData({}, 'ERROR',
filename, 'getRootOrgs', 'error in getting root orgs.', err))
process.exit(1)
}
})
}
/**
* 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 CBW callback after success or error
*/
function getRootOrgsFromCache (CBW) {
cacheManager.get(configData.orgCacheKeyName, function (err, cachedata) {
if (err || !cachedata) {
var inputObj = {
'request': {
'filters': { 'isRootOrg': true }
}
}
getRootOrgs(inputObj, function (err, res) {
if (err) {
CBW(err)
} else {
var cacheinputdata = {
key: configData.orgCacheKeyName,
value: res.result.response.content,
ttl: configData.orgCacheExpiryTime
}
cacheManager.set(cacheinputdata, function (err, data) {
if (err) {
LOG.error(utilsService.getLoggerData({}, 'ERROR', filename, 'Setting allRootOrgs cache failed',
'Setting allRootOrgs cache data failed', err))
} else {
LOG.info(utilsService.getLoggerData({}, 'INFO', filename,
'Setting allRootOrgs cache data success'))
}
})
CBW(null, res.result.response.content)
}
})
} else {
CBW(null, cachedata)
}
})
}
/**
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
* This function loops each object from the input and maps channel id with hasTagId from orgdetails and prepares orgDetails obj for each obj in the array
* @param inputdata is array of objects, it might be content or course
* @param cb callback after success or error
*/
function populateOrgDetailsByHasTag (inputdata, inputfields, cb) {
inputfields = inputfields.split(',')
var fieldsToPopulate = configData.orgfieldsAllowedToSend.filter(eachfield => inputfields.includes(eachfield))
if (_.size(fieldsToPopulate) > 0 && _.size(inputdata) > 0) {
getRootOrgsFromCache(function (err, orgdata) {
if (!err && orgdata) {
var orgDetails = _.keyBy(orgdata, 'hashTagId')
_.forEach(inputdata, (eachcontent, index) => {
if (eachcontent.channel) {
var eachorgdetail = orgDetails[eachcontent.channel]
inputdata[index].orgDetails = eachorgdetail ? _.pick(eachorgdetail, fieldsToPopulate) : {}
}
})
};
cb(null, inputdata)
})
} else {
cb(null, inputdata)
}
}
/**
* This function loops each object from the input and includes org details in it
* @param inputdata is req object and res object
* @param cb there will be no error callback , always returns success
*/
function includeOrgDetails (req, res, cb) {
if (_.get(req, 'query.orgdetails') && _.get(res, 'result.content')) {
var fields = req.query.orgdetails
var inputContentIsArray = _.isArray(res.result.content)
// res.result.content need to send as array bec populateOrgDetailsByHasTag expects data as array
res.result.content = inputContentIsArray ? res.result.content : [res.result.content]
populateOrgDetailsByHasTag(res.result.content, fields, function
(err, contentwithorgdetails) {
if (!err) {
res.result.content = inputContentIsArray ? contentwithorgdetails : contentwithorgdetails[0]
}
cb(null, res)
})
} else {
cb(null, res)
}
}
module.exports = {
getRootOrgs: getRootOrgs,
includeOrgDetails: includeOrgDetails,
populateOrgDetailsByHasTag: populateOrgDetailsByHasTag
}