Source: directives/deteccao-impacto/deteccao-impacto.service.js

(function () {
    'use strict';

    /**
     * @ngdoc directives
     * @name DeteccaoImpactoService
     * @module s4c.directives.deteccaoImpacto.DeteccaoImpactoService
     *
     * @description
     * `DeteccaoImpactoService` gerencia a comunicação entre o módulo Detecção
     * de Impacto e o backend do S4C.
     *
     */
    function DeteccaoImpactoService($http, $q, API_ENDPOINT) {

        /**
         * Lista as categorias
         * 
         * @method pegarListaCategorias
         *
         *
         * @returns {Promise} Promise que resolve com a lista de categorias que
         * o usuário tem acesso.
         */
        function pegarListaCategorias() {
            var deferred = $q.defer();

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

            return deferred.promise;
        }

        /**
         *
         * 
         * @method pegarPathCategoria
         *
         * @param categoriaId {categoriaId}  Identificador da categoria
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function pegarPathCategoria(categoriaId) {

            var deferred = $q.defer();

            $http.get(API_ENDPOINT + 'categorias/path/' + categoriaId)
                .then(function (res) {
                    deferred.resolve(res.data);
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         *
         * 
         * @method capturar
         *
         * @param {Object} obj Um objeto contendo os dois acervos para comparar
         * no backend e receber o resultado do cruzamento dos dados.
         * obj: {
         *     categoriaId1: <Id da primeira categoria>,
         *     categoriaId2: <Id da segunda categoria>,
         *     distancia: <Distância em metros>
         * }
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function capturar(parametros) {
            var deferred = $q.defer();

            $http.post(API_ENDPOINT + 'deteccao_impacto', parametros)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        return {
            pegarListaCategorias: pegarListaCategorias,
            pegarPathCategoria: pegarPathCategoria,
            capturar: capturar
        };
    }

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

    angular.module('s4c.components.deteccaoImpacto')
        .service('DeteccaoImpactoService', DeteccaoImpactoService);
})();