Source: directives/busca/busca.service.js

/**
 * @ngdoc directives
 * @name BuscaService
 * @module s4c.directives.busca.BuscaService
 *
 * @description
 * `BuscaService` faz a conexão com a API do S4C, passando os filtros para
 * receber os resultados da busca.
 */
(function () {
    'use strict';

    BuscaService.$inject = [
        '$http',
        '$q',
        'API_ENDPOINT',
        'Base'
    ];


    function BuscaService($http, $q, API_ENDPOINT, Base) {

        /**
         * Consulta base de conhecimento
         *
         * @method getBaseConhecimento
         * 
         *
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getBaseConhecimento(data) {
            var deferred = $q.defer();
            var url = API_ENDPOINT + 'base_conhecimento/buscarapida/' + data.texto;

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * Consulta Planejamento
         *
         * @method getPlanejamento
         * 
         *
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getPlanejamento(data) {
            var deferred = $q.defer();

            var url = (data.start && data.end) ? API_ENDPOINT + 'planejamento/buscarapida/' + data.texto + '/'
                + data.start + '/' + data.end : API_ENDPOINT + 'planejamento/buscarapida/' + data.texto;

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * Consulta zona de observação
         * 
         * @method getZonaObservacao
         * 
         *
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getZonaObservacao(data) {
            var deferred = $q.defer();

            var url = (data.start && data.end) ? API_ENDPOINT + 'zona_observacao/find/' + data.texto + '/'
                + data.start + '/' + data.end : API_ENDPOINT + 'zona_observacao/find/' + data.texto;

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * Consulta as tarefas
         *
         * @method getTarefas
         * 
         *
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getTarefas(data) {
            var deferred = $q.defer();

            var url = (data.start && data.end) ? API_ENDPOINT + 'tarefas/find/' + data.texto + '/'
                + data.start + '/' + data.end : API_ENDPOINT + 'tarefas/find/' + data.texto;

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * Consulta rotas
         *
         * @method getRotas
         * 
         *
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getRotas(data) {
            var deferred = $q.defer();

            var url = (data.start && data.end) ? API_ENDPOINT + 'rotas_unificadas/buscarapida/' + data.texto + '/'
                + data.start + '/' + data.end : API_ENDPOINT + 'rotas_unificadas/buscarapida/' + data.texto;

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * Consulta Incidentes
         *
         * @method getIncidentes
         *
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getIncidentes(data) {
            var deferred = $q.defer();

            var url = (data.start && data.end) ? API_ENDPOINT + 'incidentes/buscarapida/' + data.texto + '/'
                + data.start + '/' + data.end : API_ENDPOINT + 'incidentes/buscarapida/' + data.texto;

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         *
         * Consulta Pois por sensores
         *
         * @method getPoisBySensores
         * 
         *
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getPoisBySensores(data, sensores) {
            var deferred = $q.defer();
            var url = API_ENDPOINT + 'pois/find/' + data.texto + '/sensores/' + sensores.join(',');

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * Consulta os pois baseado no texto passado na busca
         * @method getPois
         * 
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getPois(data) {
            var deferred = $q.defer();
            var url = API_ENDPOINT + 'pois/find/' + data.texto + '/';

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * Consulta os pois baseado no texto passado na busca
         * @method getCameras
         * 
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getCameras(data) {
            var deferred = $q.defer();
            var url = API_ENDPOINT + 'cameras/find/' + data.texto;

            $http.get(url)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * Consulta viaturas
         * @method getViaturas
         * 
         * @param {obj} data Um objeto contendo os filtros para utilizar na
         * busca
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getViaturas(data) {
            return Base.obter('viaturas/search/' + data.texto, null, {
                version: 2
            });
        }

        return {
            getBaseConhecimento: getBaseConhecimento,
            getPlanejamento: getPlanejamento,
            getZonaObservacao: getZonaObservacao,
            getTarefas: getTarefas,
            getRotas: getRotas,
            getIncidentes: getIncidentes,
            getPois: getPois,
            getPoisBySensores: getPoisBySensores,
            getCameras: getCameras,
            getViaturas: getViaturas
        };
    }

    angular.module('s4c.components.busca')
        .service('BuscaService', BuscaService);

})();