all files / lib/routers/ mountEvents.js

73.42% Statements 58/79
62.5% Branches 10/16
100% Functions 2/2
72% Lines 54/75
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131                                                                                                                                                      16×    
'use strict';
 
Object.defineProperty(exports, "__esModule", {
        value: true
});
exports.default = mountEvents;
 
var _bodyParser = require('body-parser');
 
var _bodyParser2 = _interopRequireDefault(_bodyParser);
 
var _express = require('express');
 
var _express2 = _interopRequireDefault(_express);
 
var _mongodb = require('mongodb');
 
var _mongodb2 = _interopRequireDefault(_mongodb);
 
var _checkObjectID = require('../middleware/checkObjectID');
 
var _checkObjectID2 = _interopRequireDefault(_checkObjectID);
 
var _checkStreamIndex = require('../middleware/checkStreamIndex');
 
var _checkStreamIndex2 = _interopRequireDefault(_checkStreamIndex);
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
//endregion
 
//endregion
 
//region 2. Project Libraries
const context = {
        router: _express2.default.Router({ mergeParams: true }),
        cameras: null,
        logger: null
}; //region 1. Platform Libraries
 
 
context.router.use('/', _bodyParser2.default.json());
context.router.use('/', _checkObjectID2.default);
context.router.use('/', _checkStreamIndex2.default);
 
context.router.post('/', (req, res) => {
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: `POST ${ req.originalUrl }` });
        log('debug', JSON.stringify(req.body, null, 2));
        ['type', 'time'].forEach(property => {
                Eif ({}.hasOwnProperty.call(req.body, property)) {
                        return;
                }
                const message = `Event Contains No ${ property }`;
                log('error', message);
                res.status(400).send(message);
        });
        const diff = {};
        diff[`streams.${ req.params.index }.events`] = {
                type: req.body.type,
                time: parseInt(req.body.time, 10),
                status: 'Pending',
                videos: []
        };
        const _id = new _mongodb2.default.ObjectID(req.params.id);
        context.cameras.updateOne({ _id }, { $push: diff }, (err, result) => {
                Iif (err) {
                        log('error', err.message);
                        res.status(500).send(err.message);
                        return;
                }
                Iif (!result.matchedCount) {
                        const message = 'Camera Not Found';
                        log('error', message);
                        res.status(500).send(message);
                        return;
                }
                log('info', '200 OK');
                res.sendStatus(200);
        });
});
 
context.router.put('/', (req, res) => {
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: `PUT ${ req.originalUrl }` });
        log('debug', JSON.stringify(req.query));
        log('debug', JSON.stringify(req.body));
        Iif (!{}.hasOwnProperty.call(req.body, 'videoInfo')) {
                const message = 'Event Contains No Video Info';
                log('error', message);
                res.status(400).send(message);
                return;
        }
        const query = { _id: new _mongodb2.default.ObjectID(req.params.id) };
        query[`streams.${ req.params.index }.events.time`] = parseInt(req.query.time, 10);
        log('debug', JSON.stringify(query, null, 2));
        const diff = {};
        diff[`streams.${ req.params.index }.events.$.videos`] = [req.body.videoInfo];
        log('debug', JSON.stringify(diff, null, 2));
        context.cameras.updateOne(query, { $set: diff }, (err, result) => {
                Iif (err) {
                        log('error', err.message);
                        res.status(500).send(err.message);
                        return;
                }
                Iif (!result.matchedCount) {
                        const message = 'Camera Not Found';
                        log('error', message);
                        res.status(500).send(message);
                        return;
                }
                log('info', '200 OK');
                res.sendStatus(200);
        });
});
 
//noinspection JSUnusedGlobalSymbols
/**
 * Mount router for /c/:/s/:/events
 * @param {object}         options          Options
 * @param {object}         options.app      Express App
 * @param {MongoClient.Db} options.database Associated Database
 * @param {winston.Logger} options.logger   Logger
 */
function mountEvents(options) {
        context.logger = options.logger;
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'mountEvents' });
        log('debug', 'Mounting router for /c/:/s/:/events....');
        options.app.use('/cameras/:id/streams/:index/events', context.router);
        context.cameras = options.database.collection('cameras');
        log('info', 'Router for /c/:/s/:/events Mounted');
}
//# sourceMappingURL=mountEvents.js.map