all files / api/lib/ article.js

93.1% Statements 27/29
88.89% Branches 8/9
100% Functions 0/0
92.86% Lines 26/28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50      28×   28× 28× 28×   28×           28× 28×   28×   28×                   26× 26× 26× 26× 26×      
'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);
            }
        });
};