Source: services/Perfil.js

    /**
     * @ngdoc service
     * @name s4c.services.Perfil
     * @module s4c.services
     * 
     * @description  Componente para acesso a api do backend e/ou comunicação entre controllers
     * 
     *
     */  
     
'use strict';

(function () {

   /**	
	* @method Perfil
	* @param {*} $resource
	* @param {*} $q
	* @param {*} API_ENDPOINT
	* @param {*} $http
	*/
    function Perfil($resource, API_ENDPOINT, $q, $http) {

  	   /**	
		* @method crud
		*/
        function crud() {
            return $resource(API_ENDPOINT + 'perfil/:id', { id: '@id' }, {
                save: { method: 'PUT' },
                delete: { method: 'DELETE' }
            });
        }

        var self = this;
        self.perfis = undefined;
        self.canLoad = true;
        self.p = $q.defer();

  	   /**	
		* @method getPerfis
		*/
        function getPerfis() {

            if (self.perfis || !self.canLoad) {
                return self.p.promise;
            }

            self.canLoad = false;
            $http.get(API_ENDPOINT + 'perfil')
                .then(function (response) {

                    if (typeof response.data === 'object') {

                        self.canLoad = true;
                        self.perfis = response.data;
                        self.p.resolve(response.data);

                    } else {
                        self.p.reject(response);
                    }
                }, function (err) {
                    self.p.reject(err);
                });

            return self.p.promise;
        }

        return {
            crud: crud,
            getPerfis: getPerfis
        };

    }

    angular.module('s4c.services.Perfil', [])
        .factory('Perfil', Perfil);

    Perfil.$inject = ['$resource', 'API_ENDPOINT', '$q', '$http'];
}());