all files / lib/routers/ mountVideoInfo.js

56.88% Statements 62/109
53.85% Branches 14/26
100% Functions 2/2
55.77% Lines 58/104
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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173                                                                                                                                                                                                                                  16×    
'use strict';
 
Object.defineProperty(exports, "__esModule", {
        value: true
});
exports.default = mountVideoInfo;
 
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('/', _checkObjectID2.default);
context.router.use('/', _checkStreamIndex2.default);
 
context.router.get('/-1', (req, res) => {
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: `GET ${ req.originalUrl }` });
        const _id = new _mongodb2.default.ObjectID(req.params.id);
        context.cameras.findOne(_id, (findOneCameraErr, camera) => {
                Iif (findOneCameraErr) {
                        log('error', findOneCameraErr.message);
                        res.status(500).send(findOneCameraErr.message);
                        return;
                }
                Iif (!camera) {
                        const message = 'Camera Not Found';
                        log('error', message);
                        res.status(500).send(message);
                        return;
                }
                /** @type Stream */
                const stream = camera.streams[req.params.index];
                Iif (!stream) {
                        const message = 'Stream Not Found';
                        log('error', message);
                        res.status(500).send(message);
                        return;
                }
                const videoInfo = stream.video_info;
                const reply = {};
                if (!videoInfo || videoInfo.length === 0) {
                        reply.index = 0;
                } else {
                        const lastVideoInfo = videoInfo[videoInfo.length - 1];
                        reply.index = lastVideoInfo.index;
                        reply.startTime = lastVideoInfo.start_time;
                        reply.endTime = lastVideoInfo.end_time;
                        reply.bucketName = lastVideoInfo.bucket_name;
                        reply.objectName = lastVideoInfo.object_name;
                }
                log('info', '200 OK');
                log('debug', JSON.stringify(reply, null, 2));
                res.status(200).send(reply);
        });
});
 
context.router.put('/', _bodyParser2.default.json());
 
context.router.put('/', (req, res) => {
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: `PUT ${ req.originalUrl }` });
        log('debug', JSON.stringify(req.body, null, 2));
        Iif (req.body.length === 0) {
                const message = 'No Request or Request Body';
                log('error', message);
                res.status(400).send(message);
                return;
        }
        const diff = {};
        diff[`streams.${ req.params.index }.video_info`] = {
                index: req.body.index,
                start_time: req.body.startTime,
                end_time: req.body.endTime,
                bucket_name: req.body.bucketName,
                object_name: req.body.objectName
        };
        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 === 0) {
                        const message = 'Camera Not Found';
                        log('error', message);
                        res.status(500).send(message);
                        return;
                }
                log('info', '200 OK');
                res.sendStatus(200);
        });
});
 
/**
 * @param {string} req.params.vindex
 */
context.router.put('/:vindex/status', (req, res) => {
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: `PUT ${ req.originalUrl }` });
        log('debug', JSON.stringify(req.body, null, 2));
        const index = parseInt(req.params.index, 10);
        const vindex = parseInt(req.params.vindex, 10);
        if (req.body.length === 0) {
                const message = 'No Request or Request Body';
                log('error', message);
                res.status(400).send(message);
                return;
        }
        const diff = {};
        diff[`streams.${ index }.video_info.${ vindex - 1 }.status`] = req.body;
        const _id = _mongodb2.default.ObjectID(req.params.id);
        context.cameras.updateOne({ _id }, { $set: diff }, (err, result) => {
                if (err) {
                        log('error', err.message);
                        res.status(500).send(err.message);
                        return;
                }
                if (result.matchedCount === 0) {
                        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/:/video-info
 * @param {object}         options          Options
 * @param {object}         options.app      Express App
 * @param {MongoClient.Db} options.database Associated Database
 * @param {winston.Logger} options.logger   Logger
 */
function mountVideoInfo(options) {
        context.logger = options.logger;
        const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'mountVideoInfo' });
        log('debug', 'Mounting router for /c/:/s/:/video-info....');
        options.app.use('/cameras/:id/streams/:index/video-info', context.router);
        context.cameras = options.database.collection('cameras');
        log('info', 'Router for /c/:/s/:/video-info Mounted');
}
//# sourceMappingURL=mountVideoInfo.js.map