tm-apps-list-api
Version:
71 lines (60 loc) • 2.24 kB
JavaScript
let hl = require("highland");
let utils = require("./utils");
let R = require("ramda");
const BeneLogger = require('bene-logger');
const tz = require('timezone/loaded');
const requestCB = require('./request');
module.exports = (config, db) => (req, res, next) => {
const publicationId = req.params.publicationId;
const escenicId = req.params.escenicId;
const source = req.params.source;
const logger = new BeneLogger({logging: config.logging.enabled});
logger.setDefaults({
tag_id: `${source}.${escenicId}`,
source: source,
service_name: 'apps-api'
});
logger.info('Processing Sections Request');
logger.time('Finished Sections Request');
const articlesEndpoint = !req.query.cache || req.query.cache !== "false" ? config.cacheEndpoint : config.articleEndpoint;
const stream = hl(db.tag.find({
"where": {
"tag_id": `${source}.${escenicId}`
}
}))
.reject(R.isNil)
.invoke("get", {"plain": true})
.pluck("id")
.flatMap(id => {
return hl(db.article_tag.findAll({
"where": {
"tag_id": id,
"published_date": {
"$and": {
"$ne": null,
"$lte": tz(new Date(), '%Y-%m-%dT%H:%M:%S.%3N%^z', 'UTC')
}
}
},
"limit": 30,
"order": [[
'published_date',
'DESC'
]]
}));
})
.sequence()
.invoke("get", {"plain": true})
.pluck("article_id");
const GetArticle = utils.makeArticleRequestCB(config, logger, articlesEndpoint, source, publicationId);
const NotFound = utils.notFound(`${source}/${publicationId}/tags/${escenicId || ""} not available`);
if(requestCB(config).circuitBreaker.isOpen()) {
res.header('etag', req.header.etag);
res.send(304);
} else {
utils.getArticlesInParallel(logger, GetArticle, NotFound, stream)
.map(utils.addMeta)
.toCallback(utils.sendResponse(logger, res, next));
}
};
;