Source: directives/minhas-tarefas/tarefa.service.js

(function () {
    'use strict';

    /**
     * @ngdoc directives
     * @name TarefaService
     * @module s4c.directives.minhas-tarefas.TarefasService
     *
     * @description
     * `TarefaService` gerencia a comunicação entre tarefas no Frontend
     * e a API do backend.
     */
    function TarefaService($http, $q, API_ENDPOINT, Usuario) {

        /**
         * 
         * @method addTarefa
         *
         * @returns {Promise} Promise que resolve com a nova tarefa criada.
         */
        function addTarefa(obj) {
            var deferred = $q.defer();
            $http.put(API_ENDPOINT + 'tarefas/', 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 addTarefa
         *
         * @params {obj} obj Objeto contendo campos da tarefa a serem
         * atualizados.
         *
         * @returns {Promise} Promise que resolve com a tarefa atualizada.
         */
        function updateTarefa(obj) {
            var deferred = $q.defer();
            $http.post(API_ENDPOINT + 'tarefas/', 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
         *
         * @params {integer} id identificador unico da tarefa.
         *
         * @returns {Promise} Promise que resolve com a tarefa buscada.
         */
        function findById(id) {
            var deferred = $q.defer();

            $http.get(API_ENDPOINT + 'tarefas/' + 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 getUsuarios
         *
         * @returns {Promise} Promise que resolve com uma lista de usuários
         * do sistema S4C.
         */
        function getUsuarios() {
            return Usuario.obterShortUsers();
        }

        /**
         * 
         * 
         * @method enviarMsg
         *
         * @params {obj} msg objeto contendo informações sobre a mensagem a ser
         * enviada.
         * @returns {Promise} Promise que resolve com o retorno do envio da
         * mensagem.
         */
        function enviarMsg(msg) {
            var deferred = $q.defer();
            $http.post(API_ENDPOINT + 'email/', msg)
                .then(function (res) {
                    if (typeof res.data === 'object') {
                        deferred.resolve(res.data);
                    } else {
                        deferred.reject(res);
                    }
                }, function (err) {
                    deferred.reject(err);
                });

            return deferred.promise;
        }
        /*function findAndDelete(id) {
            var deferred = $q.defer();

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

            return deferred.promise;
        }*/
        /**
         * @method addAlarmeTarefas
         * @param {*} id 
         * @param {*} alarme 
         */
        function addAlarmeTarefas(id, alarme) {
            var deferred = $q.defer();

            $http.post(API_ENDPOINT + 'alarme/rota/' + id, alarme)
                .then(function (response) {
                    if (typeof response.data === 'object') {
                        deferred.resolve(response.data);
                    } else {
                        deferred.reject();
                    }
                }, function (error) {
                    deferred.reject(error);
                });

            return deferred.promise;
        }

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

            $http.get(API_ENDPOINT + 'alarme/rota/' + id)
                .then(function (response) {
                    deferred.resolve(response);
                });

            return deferred.promise;
        }

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

            $http.delete(API_ENDPOINT + 'alarme/rota/' + alarmeId)
                .then(function (response) {
                    deferred.resolve(response);
                });

            return deferred.promise;
        }

        return {
            findById: findById,
            addTarefa: addTarefa,
            updateTarefa: updateTarefa,
            getUsuarios: getUsuarios,
            addAlarmeTarefas: addAlarmeTarefas,
            getAlarmesTarefas: getAlarmesTarefas,
            deleteAlarmeTarefas: deleteAlarmeTarefas,
            enviarMsg: enviarMsg
        };
    }

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

    angular.module('s4c.components.tarefas')
        .service('TarefaService', TarefaService);

})();