UNPKG

fog-controller

Version:

Fog Controller project @ iotracks.com

536 lines (435 loc) 19.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _async = require('async'); var _async2 = _interopRequireDefault(_async); var _changeTrackingService = require('../../services/changeTrackingService'); var _changeTrackingService2 = _interopRequireDefault(_changeTrackingService); var _elementImageService = require('../../services/elementImageService'); var _elementImageService2 = _interopRequireDefault(_elementImageService); var _elementService = require('../../services/elementService'); var _elementService2 = _interopRequireDefault(_elementService); var _elementInstanceService = require('../../services/elementInstanceService'); var _elementInstanceService2 = _interopRequireDefault(_elementInstanceService); var _elementInstancePortService = require('../../services/elementInstancePortService'); var _elementInstancePortService2 = _interopRequireDefault(_elementInstancePortService); var _elementInstanceConnectionsService = require('../../services/elementInstanceConnectionsService'); var _elementInstanceConnectionsService2 = _interopRequireDefault(_elementInstanceConnectionsService); var _elementInputTypeService = require('../../services/elementInputTypeService'); var _elementInputTypeService2 = _interopRequireDefault(_elementInputTypeService); var _elementOutputTypeService = require('../../services/elementOutputTypeService'); var _elementOutputTypeService2 = _interopRequireDefault(_elementOutputTypeService); var _fogTypeService = require('../../services/fogTypeService'); var _fogTypeService2 = _interopRequireDefault(_fogTypeService); var _networkPairingService = require('../../services/networkPairingService'); var _networkPairingService2 = _interopRequireDefault(_networkPairingService); var _routingService = require('../../services/routingService'); var _routingService2 = _interopRequireDefault(_routingService); var _satellitePortService = require('../../services/satellitePortService'); var _satellitePortService2 = _interopRequireDefault(_satellitePortService); var _userService = require('../../services/userService'); var _userService2 = _interopRequireDefault(_userService); var _appUtils = require('../../utils/appUtils'); var _appUtils2 = _interopRequireDefault(_appUtils); var _winstonLogs = require('../../utils/winstonLogs'); var _winstonLogs2 = _interopRequireDefault(_winstonLogs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /*********************************************** EndPoints **************************************************************/ /************ Get Element Details EndPoint (Get: /api/v2/authoring/element/module/details/moduleid/:moduleId) ************/ /** * @file elementController.js * @author Zishan Iqbal * @description This file includes the implementation of the end-points that deal with elements */ var getElementDetailsEndPoint = function getElementDetailsEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, elementProps = { elementId: 'bodyParams.moduleId', setProperty: 'elementData' }; params.bodyParams = req.params; params.bodyParams.t = req.query.t; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), _async2.default.apply(_elementService2.default.getElementDetails, elementProps)], function (err, result) { _appUtils2.default.sendResponse(res, err, 'module', params.elementData, result); }); }; /************ Create Element For User EndPoint (Post: /api/v2/authoring/element/module/create) ************/ var createElementForUserEndPoint = function createElementForUserEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), createElementForUser, createElementInputType, createElementOutputType], function (err, result) { var elementData = {}; if (params.element) { elementData.id = params.element.id; } _appUtils2.default.sendResponse(res, err, 'module', elementData, 'unable to create new element instance'); }); }; /* //Deprecated code /!*************** Create Element EndPoint (Post) *****************!/ const createElementEndPoint = function(req, res) { logger.info("Endpoint hit: "+ req.originalUrl); let params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }; params.bodyParams = req.body; logger.info("Parameters:" + JSON.stringify(params.bodyParams)); async.waterfall([ async.apply(UserService.getUser, userProps, params), createElement, ], function(err, result) { AppUtils.sendResponse(res, err, 'element', params.element, result); }) }; */ /* //Deprecated code /!*************** Update Element EndPoint (Post) *****************!/ const updateElementEndPoint = function(req, res) { logger.info("Endpoint hit: "+ req.originalUrl); let params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, elementProps = { networkElementId: 'bodyParams.id', setProperty: 'element' }, fogTypeProps = { elementId: 'bodyParams.id', }; params.bodyParams = req.body; logger.info("Parameters:" + JSON.stringify(params.bodyParams)); async.waterfall([ async.apply(UserService.getUser, userProps, params), async.apply(ElementService.getNetworkElement, elementProps), checkFogTypes, updateElement, async.apply(ElementImageService.deleteElementImage, fogTypeProps), ], function(err, result) { AppUtils.sendResponse(res, err, 'element', params.bodyParams.id, result); }) }; */ var checkFogTypes = function checkFogTypes(params, callback) { var fogTypeIds = []; if (params.bodyParams.fabricTypeIds) { fogTypeIds = params.bodyParams.fabricTypeIds.split(','); } params.fogTypeIds = fogTypeIds; if (fogTypeIds.length) { _async2.default.eachOfSeries(params.fogTypeIds, function (value, key, cb) { var fogTypeProps = { fogTypeId: value }; _fogTypeService2.default.getFogTypeDetails(fogTypeProps, params, cb); }, function (err) { if (!err) { callback(null, params); } else { callback('Error', 'Error: Unable to find fogType details'); } }); } else { callback(null, params); } }; /*************** Update Element For User EndPoint (Post: /api/v2/authoring/element/module/update) ***********************/ var updateElementForUserEndPoint = function updateElementForUserEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, elementProps = { networkElementId: 'bodyParams.id', setProperty: 'element' }, elementImageProps = { elementId: 'bodyParams.id' }; params.bodyParams = req.body; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), _async2.default.apply(_elementService2.default.getNetworkElement, elementProps), updateElement, updateElementImages, updateElementInputType, updateElementOutputType], function (err, result) { _appUtils2.default.sendResponse(res, err, '', '', result); }); }; /* ////Deprecated code /!*************** Delete Element EndPoint (Post: /api/v2/authoring/organization/element/delete) *****************!/ const deleteElementEndPoint = function(req, res) { logger.info("Endpoint hit: "+ req.originalUrl); let params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, elementProps = { elementKey: 'bodyParams.id', setProperty: 'elementInstanceData' }, deleteElementProps = { elementId: 'bodyParams.id', }; params.bodyParams = req.body; logger.info("Parameters:" + JSON.stringify(params.bodyParams)); async.waterfall([ async.apply(UserService.getUser, userProps, params), async.apply(ElementInstanceService.findElementInstancesByElementKey, elementProps), deleteElementInstanceData, async.apply(ElementService.deleteElementById, deleteElementProps) ], function(err, result) { AppUtils.sendResponse(res, err, 'elementId', params.bodyParams.id, result); }) }; */ /*************** Delete Element For User EndPoint (Get: /api/v2/authoring/element/module/delete/moduleid/:moduleId) **************/ var deleteElementForUserEndPoint = function deleteElementForUserEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, elementProps = { elementKey: 'bodyParams.moduleId', setProperty: 'elementInstanceData' }, elementIdProps = { elementId: 'bodyParams.moduleId' }, elementKeyProps = { networkElementId: 'bodyParams.moduleId', setProperty: 'elementData' }; params.bodyParams = req.params; params.bodyParams.t = req.query.t; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), _async2.default.apply(_elementService2.default.getNetworkElement, elementKeyProps), _async2.default.apply(_elementInstanceService2.default.findElementInstancesByElementKey, elementProps), deleteElementInstanceData, _async2.default.apply(_elementImageService2.default.deleteElementImage, elementIdProps), _async2.default.apply(_elementInputTypeService2.default.deleteElementInputType, elementProps), _async2.default.apply(_elementOutputTypeService2.default.deleteElementOutputType, elementProps), _async2.default.apply(_elementService2.default.deleteElementById, elementIdProps)], function (err, result) { _appUtils2.default.sendResponse(res, err, 'moduleId', params.bodyParams.moduleId, result); }); }; var updateFogChangeTracking = function updateFogChangeTracking(params, callback) { var changeTrackingProps = { elementInstanceData: 'elementInstancesData', field: 'iofog_uuid', changeObject: { containerList: new Date().getTime() } }; _changeTrackingService2.default.updateChangeTrackingData(changeTrackingProps, params, callback); }; /************* Get Element Catalog EndPoint (Get: api/v2/authoring/element/catalog/get) ***********/ var getCatalogOfElements = function getCatalogOfElements(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, getElementCatalogProps = { userId: 'user.id', setProperty: 'elementCatalog' }; params.bodyParams = req.params; params.bodyParams.t = req.query.t; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), _async2.default.apply(_elementService2.default.getElementCatalog, getElementCatalogProps)], function (err, result) { _appUtils2.default.sendResponse(res, err, 'elementCatalog', params.elementCatalog, result); }); }; /************* Get Elements For Publishing EndPoint (Get: api/v2/authoring/element/get) ***********/ var getElementsForPublishingEndPoint = function getElementsForPublishingEndPoint(req, res) { _winstonLogs2.default.info("Endpoint hit: " + req.originalUrl); var params = {}, userProps = { userId: 'bodyParams.t', setProperty: 'user' }, elementProps = { userId: 'user.id', setProperty: 'elementCatalog' }; params.bodyParams = req.params; params.bodyParams.t = req.query.t; _winstonLogs2.default.info("Parameters:" + JSON.stringify(params.bodyParams)); _async2.default.waterfall([_async2.default.apply(_userService2.default.getUser, userProps, params), _async2.default.apply(_elementService2.default.getElementForPublish, elementProps)], function (err, result) { _appUtils2.default.sendResponse(res, err, 'elementCatalog', params.elementCatalog, result); }); }; /*************************************** Extra Functions *************************************************/ var createElement = function createElement(params, callback) { var elementProps = { element: { name: params.bodyParams.name, description: params.bodyParams.description, config: params.bodyParams.config, category: params.bodyParams.category, registry: params.bodyParams.registry, publisher: params.bodyParams.publisher, diskRequired: false, ramRequired: false, picture: params.bodyParams.picture, isPublic: false }, setProperty: 'element' }; _elementService2.default.createElement(elementProps, params, callback); }; var createElementInputType = function createElementInputType(params, callback) { var elementInputTypeProps = { elementInputType: { elementKey: params.element.id, infoType: params.bodyParams.infoType || '', infoFormat: params.bodyParams.infoFormat || '' }, setProperty: 'elementInputType' }; _elementInputTypeService2.default.createElementInputType(elementInputTypeProps, params, callback); }; var createElementOutputType = function createElementOutputType(params, callback) { var elementOutputTypeProps = { elementOutputType: { elementKey: params.element.id, infoType: params.bodyParams.infoType || '', infoFormat: params.bodyParams.infoFormat || '' }, setProperty: 'elementOutputType' }; _elementOutputTypeService2.default.createElementOutputType(elementOutputTypeProps, params, callback); }; var createElementForUser = function createElementForUser(params, callback) { var elementProps = { element: { name: params.bodyParams.name || '', description: params.bodyParams.description || '', category: params.bodyParams.category || '', publisher: params.bodyParams.publisher || '', config: params.bodyParams.config || '', diskRequired: params.bodyParams.diskRequired || false, ramRequired: params.bodyParams.ramRequired || false, picture: params.bodyParams.picture || 'images/shared/default.png', isPublic: params.bodyParams.isPublic || false, registryId: params.bodyParams.registryId || 1, user_id: params.user.id }, setProperty: 'element' }; _elementService2.default.createElement(elementProps, params, callback); }; var updateElement = function updateElement(params, callback) { var elementProps = { elementId: 'bodyParams.id', updatedElement: { name: params.bodyParams.name, description: params.bodyParams.description, config: params.bodyParams.config, category: params.bodyParams.category, registry_id: params.bodyParams.registry, publisher: params.bodyParams.publisher, diskRequired: params.bodyParams.diskRequired ? params.bodyParams.diskRequired : false, ramRequired: params.bodyParams.ramRequired ? params.bodyParams.ramRequired : false, picture: params.bodyParams.picture, isPublic: false, user_id: params.user.id } }; _elementService2.default.updateElement(elementProps, params, callback); }; var updateElementImages = function updateElementImages(params, callback) { var elementImages = []; if (params.bodyParams.images) { elementImages = params.bodyParams.images; } if (elementImages.length) { _async2.default.eachOfSeries(elementImages, function (value, key, cb) { var elementImage = { element_id: params.bodyParams.id, iofog_type_id: value.fogTypeId, containerImage: value.image.trim() }; _elementImageService2.default.updateElementImages(elementImage, params, cb); }, function (err) { if (!err) { callback(null, params); } else { callback('Error', err); } }); } else { callback(null, params); } }; var updateElementInputType = function updateElementInputType(params, callback) { var elementInputTypeProps = { elementKey: 'bodyParams.id', updatedData: { infoType: params.bodyParams.inputType, infoFormat: params.bodyParams.inputFormat } }; _elementInputTypeService2.default.updateElementInputType(elementInputTypeProps, params, callback); }; var updateElementOutputType = function updateElementOutputType(params, callback) { var elementOutputTypeProps = { elementKey: 'bodyParams.id', updatedData: { infoType: params.bodyParams.outputType, infoFormat: params.bodyParams.outputFormat } }; _elementOutputTypeService2.default.updateElementOutputType(elementOutputTypeProps, params, callback); }; var deleteElementInstanceData = function deleteElementInstanceData(params, callback) { if (params.elementInstanceData.length) { var elementInstanceDataProps = { elementInstanceData: 'elementInstanceData', field: 'uuid' }, networkPairingProps = { elementInstanceData: 'elementInstanceData', field: 'uuid', setProperty: 'networkPairingData' }, satellitePortProps = { satellitePortIds: 'networkPairingData', field: 'satellitePortId' }, deleteNetworkElementInstanceProps = { elementInstanceData: 'networkPairingData', field1: 'networkElementId1', field2: 'networkElementId2' }; _async2.default.waterfall([_async2.default.apply(_elementInstancePortService2.default.deleteElementInstancePortsByElementIds, elementInstanceDataProps, params), _async2.default.apply(_networkPairingService2.default.findByElementInstanceIds, networkPairingProps), _async2.default.apply(_satellitePortService2.default.deleteSatellitePortByIds, satellitePortProps), _async2.default.apply(_elementInstanceService2.default.deleteNetworkElementInstances, deleteNetworkElementInstanceProps), _async2.default.apply(_networkPairingService2.default.deleteNetworkPairingByElementId1, networkPairingProps), _async2.default.apply(_elementInstanceConnectionsService2.default.deleteElementInstanceConnection, elementInstanceDataProps), _async2.default.apply(_routingService2.default.deleteByPublishingOrDestinationElementId, elementInstanceDataProps), updateFogChangeTracking, _async2.default.apply(_elementInstanceService2.default.deleteElementInstances, elementInstanceDataProps)], function (err, result) { callback(null, params); }); } else { callback(null, params); } }; exports.default = { createElementForUserEndPoint: createElementForUserEndPoint, updateElementForUserEndPoint: updateElementForUserEndPoint, getCatalogOfElements: getCatalogOfElements, getElementsForPublishingEndPoint: getElementsForPublishingEndPoint, getElementDetailsEndPoint: getElementDetailsEndPoint, deleteElementForUserEndPoint: deleteElementForUserEndPoint };