fog-controller
Version:
Fog Controller project @ iotracks.com
536 lines (435 loc) • 19.4 kB
JavaScript
'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
};