Skip to content

Instantly share code, notes, and snippets.

@gert-janvercauteren
Last active June 11, 2016 07:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save gert-janvercauteren/944e1d37725df5e8c6a4 to your computer and use it in GitHub Desktop.
Save gert-janvercauteren/944e1d37725df5e8c6a4 to your computer and use it in GitHub Desktop.
Restservice factory that works with Apigility and Restangular
angular.module('appName').factory('RestService', ['Restangular', '$q', function(Restangular, $q){
var service;
return {
setService: function($serviceName){
service = Restangular.all($serviceName);
},
create: function($data){
var serviceDeferred = $q.defer();
service.post($data).then(function(response){
serviceDeferred.resolve(response);
}, function(error){
serviceDeferred.reject(error);
});
return serviceDeferred.promise;
},
/**
* Delete a resource
*
* @param $id
* @returns {promise}
*/
delete: function($id){
var serviceDeferred = $q.defer();
service.customDELETE($id, null, {'Content-Type':'application/json'}).then(function(response){
serviceDeferred.resolve(response);
}, function(error){
serviceDeferred.reject(error);
});
return serviceDeferred.promise;
},
/**
* Fetch a resource
*
* @param $id
* @returns {promise}
*/
fetch: function($id){
var serviceDeferred = $q.defer();
service.get($id).then(function(response){
serviceDeferred.resolve(response);
}, function(error){
serviceDeferred.reject(error);
});
return serviceDeferred.promise;
},
/**
* Fetch all resources
*
* @returns {promise}
*/
fetchAll: function(){
var serviceDeferred = $q.defer();
service.customGET().then(function(response){
serviceDeferred.resolve(response);
}, function(error){
serviceDeferred.reject(error);
});
return serviceDeferred.promise;
},
/**
* Update a resource
*
* @param $id
* @param $data
* @returns {promise}
*/
update: function($id, $data){
var serviceDeferred = $q.defer();
service.customPUT($data, $id).then(function(response){
serviceDeferred.resolve(response);
}, function(error){
serviceDeferred.reject(error);
});
return serviceDeferred.promise;
},
/**
* Patch (partial in-place update) a resource
*
* @param $id
* @param $data
* @returns {promise}
*/
patch: function($id, $data){
//TODO To be implemented
},
/**
* Replace a collection or members of a collection
*
* @param $data
* @returns {promise}
*/
replaceList: function($data){
//TODO To be implemented
},
/**
* Delete a collection, or members of a collection
* @param $data
* @returns {promise}
*/
deleteList: function($data){
//TODO To be implemented
}
}
}]);
@gert-janvercauteren
Copy link
Author

Added missing functions to make a complete RestfulService

@WilldelaVega777
Copy link

Hi, are you sure this works? cause I think that apigility gives lots of issues with restangular, I have added myself this to the configuration in order to make my apigility service work (fetchAll)
RestangularProvider.setBaseUrl('http://' + serverAddress + '/api/');

// will Restangularize Apigility responses
// @see https://github.com/mgonto/restangular#my-response-is-actually-wrapped-with-some-metadata-how-do-i-get-the-data-in-that-case
RestangularProvider.addResponseInterceptor(
        function (data, operation, what)
        {
            var extractedData = [];
            if (operation == 'getList')
            {
                for (var property in data) 
                {
                    if (data.hasOwnProperty(property)) 
                    {
                        extractedData.push(data[property]);
                    }
                }

                extractedData.meta = {
                    _links : data._links || {},
                    page_count : data.page_count || 0,
                    page_size : data.page_size || 0,
                    total_items : data.total_items || 0
                };

            }

            return extractedData;
        }
);

// Restangular will send a body on remove.  Apigility does'nt like that so remove the body
RestangularProvider.addRequestInterceptor(
        function (element, operation)
        {
            if (operation === 'remove')
            {
                return null;
            }

            return element;
        }
);

// this casts the self link back to restangular so it knows how to reference itself
RestangularProvider.setRestangularFields({
    selfLink : '_links.self.href',
    cache : true // this will cache most GET requests locally
});

still don't get to work the "PUT" counterpart, any ideas??

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment