Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 am looking to do is to allow PartnerInvoiceServiceRestangular to perform the following get requests:

  • /partner/{partnerId}/invoice/ - To return ALL invoices for a specific partnerId
  • /partner/{partnerId}/invoice/?startDate=2014-06-01&stopDate=2014-6-30 - Return all invoices between 2 given dates
  • /partner/{partnerId}/invoice/{invoiceId} - To return a specific invoice

I already have the ng-models setup in the view which set the $scopes of partnerId, startDate, stopDate

like image 881
Gravy Avatar asked Dec 06 '25 22:12

Gravy


1 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;
       });
};
like image 54
Beyers Avatar answered Dec 09 '25 15:12

Beyers