'use strict';
const BeneLogger = require('bene-logger');
const restify = require('restify');
const tz = require('timezone/loaded');
const R = require('ramda');
let getArticle = require('./get/article');
module.exports = (db, config) => (req, res, next) => {
const logger = new BeneLogger({logging: config.logging.enabled});
const publicationId = req.params.publicationId;
const articleId = req.params.articleId;
const source = req.params.source;
logger.setDefaults({
article_id: articleId,
source: source,
service_name: 'appsApi'
});
logger.info('processing request');
logger.time('processed request');
getArticle(db, config, logger, source, publicationId)(articleId)
.toCallback((err, result) => {
if (err) {
if (!R.isNil(err.type)) {
// TODO: this needs to trigger alert
logger.error(err, {article_id: articleId, source: source, severe: err.type});
} else {
logger.error(err, {article_id: articleId, source: source});
}
Eif (R.has("status", err) && R.has("message", err) && R.has(err.status, restify)) {
logger.timeEnd('processed request');
next(new restify[err.status](err.message));
} else {
logger.timeEnd('processed request');
next(new restify.InternalServerError(err.stack));
}
} else {
const lastModified = tz(result.data.attributes.lastModifiedDate, '%a, %d %b %Y %H:%M:%S GMT', 'UTC');
res.header('Last-Modified', lastModified);
logger.timeEnd('processed request');
res.charSet('utf-8');
res.send(result);
}
});
}; |