Restangular Nested Rest Resources inside Factory

My services

app.factory('PartnerServiceRestangular', ['Restangular', function(Restangular) {

    return Restangular.service('partner');

}]);

app.factory('PartnerInvoiceServiceRestangular', ['PartnerServiceRestangular', function(PartnerServiceRestangular) {

    return PartnerServiceRestangular.one('partner', partnerId).service('invoice');

}]);

      

My controller

app.controller('FinancialsController', [
    '$scope',
    'PartnerServiceRestangular',
    'PartnerInvoiceServiceRestangular',
    function($scope, PartnerServiceRestangular, PartnerInvoiceServiceRestangular) {

    PartnerServiceRestangular.getList().then(function(partners) {
        $scope.partners = partners;
    });

    $scope.partnerChange = function(partner) {
        $scope.partner = partner;
    };

    var getInvoices = function(partnerId, startDate, stopDate) {

        // STUCK HERE
        PartnerInvoiceServiceRestangular.get({})    
    };

      

What I want to do is allow the PartnerInvoiceServiceRestangular

following get requests to run:

  • /partner/{partnerId}/invoice/

    - return ALL invoices for a specific partner.
  • /partner/{partnerId}/invoice/?startDate=2014-06-01&stopDate=2014-6-30

    - Return of all invoices between two given dates
  • /partner/{partnerId}/invoice/{invoiceId}

    - To return a specific invoice

I already have a setup ng-model introduction, which set $ scopes partnerId

, startDate

,stopDate

+3


source to share


2 answers


Something like this should work.

app.factory('PartnerInvoiceServiceRestangular', ['PartnerServiceRestangular', function(PartnerServiceRestangular) {

    return {
        getService: function(partnerId) {
             PartnerServiceRestangular.one('partner', partnerId).service('invoice');
        }
    }

}]);


var getInvoices = function(partnerId, startDate, stopDate) {
    PartnerInvoiceServiceRestangular.getService(partnerId)
       .getList({ startDate: startDate, stopDate: stopDate }).then(function(invoices) {
            $scope.partner.invoices = invoices;
       }
};

      



However, I'm not a fan of your factory service implementation. Why not just use:

$scope.partnerChange = function(partner) {
    $scope.partner = partner;
    partner.getList('invoice', { startDate: startDate, stopDate: stopDate }).then(function(invoices) {
            $scope.partner.invoices = invoices;
       });
};

      

+2


source


Quick response.

Let's take a look at the "Decoupled Relay Service" section: https://github.com/mgonto/restangular#decoupled-restangular-service

We can also use Nested RESTful resources:

var Cars = Restangular.service('cars', Restangular.one('users', 1));

Cars.getList() // GET to /users/1/cars

      



In your case it would be like this:

var partner = PartnerServiceRestangular.one(1);
var invoices = Restangular.service('invoice', partner);

      

But not sure if your PartnerInvoiceServiceRestangular

factory is well designed.

Hope it helps.

0


source







All Articles