Source: directives/base-conhecimento/base-conhecimento.service.js

'use strict';

(function () {

    /**
     * @ngdoc directives
     * @name Base-ConhecimentoService
     * @module s4c.directives.baseConhecimento.BaseConhecimentoService
     *
     * @description
     * `BaseConhecimentoService` gerencia a comunicação entre uma Base de
     * Conhecimento no Frontend e a API do backend.
     *
     */
    function BaseConhecimentoService($http, $q, API_ENDPOINT) {

        /**
         * 
         * 
         * @method addBaseConhecimento
         *
         * @param {obj} obj Um objeto contendo informações sobre a
         * base de conhecimento a ser salva.
         *
         * @returns {Promise} Promise que resolve com os dados da nova Base
         * salva no banco.
         */
        function addBaseConhecimento(obj) {
            var deferred = $q.defer();

            $http.put(API_ENDPOINT + 'base_conhecimento/', obj)
                .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 updateBaseConhecimento
         *
         * @param {obj} BaseConhecimento objeto contendo as informações da Base
         * de Conhecimento a ser atualizada.
         */
        function updateBaseConhecimento(obj) {
            var deferred = $q.defer();
            $http.post(API_ENDPOINT + 'base_conhecimento/', obj)
                .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 findById
         *
         * @param {integer} id o identificador unico da Base de Conhecimento a
         * ser buscada na API
         *
         * @returns {Promise} Promise que resolve com os dados da Base de
         * Conhecimento.
         */
        function findById(id) {
            var deferred = $q.defer();

            $http.get(API_ENDPOINT + 'base_conhecimento/' + id)
                .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 findAllTypes
         */
        function findAllTypes() {
            var deferred = $q.defer();

            $http.get(API_ENDPOINT + 'tipo_base/')
                .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 findAndDelete
         * @param {*} id 
         */
        function findAndDelete(id) {
            var deferred = $q.defer();

            $http.delete(API_ENDPOINT + 'base_conhecimento/' + id)
                .then(function (res) {
                    deferred.resolve(res.data);
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        /**
         * @method getAttachedFile
         * @param {*} id 
         */
        function getAttachedFile(id) {
            var deferred = $q.defer();

            $http
                .get(API_ENDPOINT + 'filemanager/' + id, { responseType: 'arraybuffer' })
                .then(function (res) {
                    deferred.resolve(res.data);
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }

        return {
            findById: findById,
            addBaseConhecimento: addBaseConhecimento,
            updateBaseConhecimento: updateBaseConhecimento,
            findAndDelete: findAndDelete,
            getAttachedFile: getAttachedFile,
            findAllTypes: findAllTypes
        };
    }

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

    angular.module('s4c.components.baseConhecimento')
        .service('BaseConhecimentoService', BaseConhecimentoService);

})();