Source: directives/twitter/twitter.service.js

(function () {
    'use strict';

    /**
     * @ngdoc directives
     * @name TwitterService
     * @module s4c.directives.twitter.TwitterService
     *
     * @description
     * `TwitterService` Componente para acesso a api do backend e/ou comunicação entre controllers
     * 
     */
    function TwitterService($http, $q, API_ENDPOINT) {

        /**
         * 
         * 
         * @method publicarTweet
         *
         * @param {integer} texto Texto a ser publicado através da conta
         * registrada no sistema.
         *
         * @returns {Promise} Promise que resolve com o resultado da publicação,
         * se foi bem sucedida, retorna o link do post.
         */
        function publicarTweet(texto) {
            var deferred = $q.defer();

            $http.put(API_ENDPOINT + 'tweets', {
                texto: texto
            })
                .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 getTweets
         *
         * @param {obj} data Informações e filtros para a busca na API do
         * twitter através do backend do S4C.
         *
         * @returns {Promise} Promise que resolve com o resultado da busca.
         */
        function getTweets(data) {
            var deferred = $q.defer();
            var query, latitude, longitude, distancia;

            if (typeof data === 'string') {
                query = data;
            } else {
                query = data.query;
                latitude = data.latitude;
                longitude = data.longitude;
                distancia = data.distancia;
            }

            //$http.put(API_ENDPOINT + 'tweets', data)
            $http.post(API_ENDPOINT + 'tweets', {
                query: query,
                latitude: latitude,
                longitude: longitude,
                distancia: distancia
            })
                .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 getEmbedHTML
         * @param {*} id 
         */
        function getEmbedHTML(id) {
            var deferred = $q.defer();

            $http.get('https://api.twitter.com/1.1/statuses/oembed.json?id=' + 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;
        }

        return {
            getTweets: getTweets,
            publicarTweet: publicarTweet,
            getEmbedHTML: getEmbedHTML
        };

    }

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

    angular.module('s4c.components.collaboration')
        .service('TwitterService', TwitterService);
})();