edge.service.js 10.9 KB
/*
 * Copyright © 2016-2020 The Thingsboard Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
export default angular.module('thingsboard.api.edge', [])
    .factory('edgeService', EdgeService)
    .name;

/*@ngInject*/
function EdgeService($http, $q, customerService) {

    var service = {
        getEdges: getEdges,
        getEdgesByIds: getEdgesByIds,
        getEdge: getEdge,
        deleteEdge: deleteEdge,
        saveEdge: saveEdge,
        getEdgeTypes: getEdgeTypes,
        getTenantEdges: getTenantEdges,
        getCustomerEdges: getCustomerEdges,
        assignEdgeToCustomer: assignEdgeToCustomer,
        findByQuery: findByQuery,
        findByName: findByName,
        unassignEdgeFromCustomer: unassignEdgeFromCustomer,
        makeEdgePublic: makeEdgePublic,
        setRootRuleChain: setRootRuleChain,
        getEdgeEvents: getEdgeEvents,
        syncEdge: syncEdge,
        findMissingToRelatedRuleChains: findMissingToRelatedRuleChains
    };

    return service;

    function getEdges(pageLink, config) {
        var deferred = $q.defer();
        var url = '/api/edges?limit=' + pageLink.limit;
        if (angular.isDefined(pageLink.textSearch)) {
            url += '&textSearch=' + pageLink.textSearch;
        }
        if (angular.isDefined(pageLink.idOffset)) {
            url += '&idOffset=' + pageLink.idOffset;
        }
        if (angular.isDefined(pageLink.textOffset)) {
            url += '&textOffset=' + pageLink.textOffset;
        }
        $http.get(url, config).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function getEdgesByIds(edgeIds, config) {
        var deferred = $q.defer();
        var ids = edgeIds.join(',');
        var url = '/api/edges?edgeIds=' + ids;
        $http.get(url, config).then(function success(response) {
            var entities = response.data;
            entities.sort(function (entity1, entity2) {
                var id1 =  entity1.id.id;
                var id2 =  entity2.id.id;
                var index1 = edgeIds.indexOf(id1);
                var index2 = edgeIds.indexOf(id2);
                return index1 - index2;
            });
            deferred.resolve(entities);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function getEdge(edgeId, ignoreErrors, config) {
        var deferred = $q.defer();
        var url = '/api/edge/' + edgeId;
        if (!config) {
            config = {};
        }
        config = Object.assign(config, { ignoreErrors: ignoreErrors });
        $http.get(url, config).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail(response) {
            deferred.reject(response.data);
        });
        return deferred.promise;
    }

    function saveEdge(edge, ignoreErrors, config) {
        var deferred = $q.defer();
        var url = '/api/edge';
        if (!config) {
            config = {};
        }
        config = Object.assign(config, { ignoreErrors: ignoreErrors });
        $http.post(url, edge, config).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail(response) {
            deferred.reject(response.data);
        });
        return deferred.promise;
    }

    function deleteEdge(edgeId) {
        var deferred = $q.defer();
        var url = '/api/edge/' + edgeId;
        $http.delete(url).then(function success() {
            deferred.resolve();
        }, function fail(response) {
            deferred.reject(response.data);
        });
        return deferred.promise;
    }

    function getEdgeTypes(config) {
        var deferred = $q.defer();
        var url = '/api/edge/types';
        $http.get(url, config).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function getTenantEdges(pageLink, applyCustomersInfo, type, config) {
        var deferred = $q.defer();
        var url = '/api/tenant/edges?limit=' + pageLink.limit;
        if (angular.isDefined(pageLink.textSearch)) {
            url += '&textSearch=' + pageLink.textSearch;
        }
        if (angular.isDefined(pageLink.idOffset)) {
            url += '&idOffset=' + pageLink.idOffset;
        }
        if (angular.isDefined(pageLink.textOffset)) {
            url += '&textOffset=' + pageLink.textOffset;
        }
        if (angular.isDefined(type) && type.length) {
            url += '&type=' + type;
        }
        $http.get(url, config).then(function success(response) {
            if (applyCustomersInfo) {
                customerService.applyAssignedCustomersInfo(response.data.data).then(
                    function success(data) {
                        response.data.data = data;
                        deferred.resolve(response.data);
                    },
                    function fail() {
                        deferred.reject();
                    }
                );
            } else {
                deferred.resolve(response.data);
            }
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function getCustomerEdges(customerId, pageLink, applyCustomersInfo, type, config) {
        var deferred = $q.defer();
        var url = '/api/customer/' + customerId + '/edges?limit=' + pageLink.limit;
        if (angular.isDefined(pageLink.textSearch)) {
            url += '&textSearch=' + pageLink.textSearch;
        }
        if (angular.isDefined(pageLink.idOffset)) {
            url += '&idOffset=' + pageLink.idOffset;
        }
        if (angular.isDefined(pageLink.textOffset)) {
            url += '&textOffset=' + pageLink.textOffset;
        }
        if (angular.isDefined(type) && type.length) {
            url += '&type=' + type;
        }
        $http.get(url, config).then(function success(response) {
            if (applyCustomersInfo) {
                customerService.applyAssignedCustomerInfo(response.data.data, customerId).then(
                    function success(data) {
                        response.data.data = data;
                        deferred.resolve(response.data);
                    },
                    function fail() {
                        deferred.reject();
                    }
                );
            } else {
                deferred.resolve(response.data);
            }
        }, function fail() {
            deferred.reject();
        });

        return deferred.promise;
    }

    function findByQuery(query, ignoreErrors, config) {
        var deferred = $q.defer();
        var url = '/api/edges';
        if (!config) {
            config = {};
        }
        config = Object.assign(config, { ignoreErrors: ignoreErrors });
        $http.post(url, query, config).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function findByName(edgeName, config) {
        config = config || {};
        var deferred = $q.defer();
        var url = '/api/tenant/edges?edgeName=' + edgeName;
        $http.get(url, config).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function assignEdgeToCustomer(customerId, edgeId) {
        var deferred = $q.defer();
        var url = '/api/customer/' + customerId + '/edge/' + edgeId;
        $http.post(url, null).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function unassignEdgeFromCustomer(edgeId) {
        var deferred = $q.defer();
        var url = '/api/customer/edge/' + edgeId;
        $http.delete(url).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function makeEdgePublic(edgeId) {
        var deferred = $q.defer();
        var url = '/api/customer/public/edge/' + edgeId;
        $http.post(url, null).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function setRootRuleChain(edgeId, ruleChainId) {
        var deferred = $q.defer();
        var url = '/api/edge/' + edgeId + '/' + ruleChainId + '/root';
        $http.post(url).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail() {
            deferred.reject();
        });
        return deferred.promise;
    }

    function getEdgeEvents(edgeId, pageLink) {
        var deferred = $q.defer();
        var url = '/api/edge/' + edgeId + '/events' + '?limit=' + pageLink.limit;
        if (angular.isDefined(pageLink.startTime) && pageLink.startTime != null) {
            url += '&startTime=' + pageLink.startTime;
        }
        if (angular.isDefined(pageLink.endTime) && pageLink.endTime != null) {
            url += '&endTime=' + pageLink.endTime;
        }
        if (angular.isDefined(pageLink.idOffset) && pageLink.idOffset != null) {
            url += '&offset=' + pageLink.idOffset;
        }
        $http.get(url, null).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail(response) {
            deferred.reject(response.data);
        });
        return deferred.promise;
    }

    function syncEdge(edgeId) {
        var deferred = $q.defer();
        var url = '/api/edge/sync/' + edgeId;
        $http.post(url, null).then(function success(response) {
            deferred.resolve(response);
        }, function fail(response) {
            deferred.reject(response.data);
        });
        return deferred.promise;
    }

    function findMissingToRelatedRuleChains(edgeId) {
        var deferred = $q.defer();
        var url = '/api/edge/missingToRelatedRuleChains/' + edgeId;
        $http.get(url, null).then(function success(response) {
            deferred.resolve(response.data);
        }, function fail(response) {
            deferred.reject(response.data);
        });
        return deferred.promise;
    }
}