Почему не работает ng-click?
Ебушки воробушки... А теперь посмотрите на мой вариант, взгляните на свою реализацию, и скажите как лучше.angular.module('productStore', [])

.factory('productRepository', function ($http) {
    var dataResolve = function(promise) {
         return promise.then(function(response) {
              return response.data;
         }
    }
   
    return {
        getProducts: function (category) {
            category = category || '';
            return dataResolver($http.get('/api/productservice/' + category));
        },
        addToCart: function (id) {
            return dataResolver($http.post('/api/cartservice/add/' + id));
        },
        getTotalPrice: function (callback) {
            return dataResolver($http.get('/api/cartservice/'));
        }
    }
})

.controller('ProductController', function ($http, productRepository) {

    var updateTotalPrice = angular.bind(this, function() {
         return productRepository.getTotalPrice.then(angular.bind(this, function(result) {
               this.totalPrice = result;
         }));
    });
    updateTotalPrice();

    productRepository.getProducts(category).then(angular.bind(this, function(results) {
        this.products = results;
    });

    this.addToCart = function(id) {
        productRepository.addToCart(id).then(function() {
               updateTotalPrice();
        };
    }
});
Используйте промисы, не используйте эти стремные штуки с this. У вас есть .bind нативный и angular.bind.
в частности меня вводит в ступор следующее:var ProductController = new productStore.controller
Если вы методы этого контроллера используете где-то еще, то самое время подумать о том что бы вынести все это добро в сервис.
Не являюсь специалистом в angular, но почему в описании контроллера, вы делаете  self.addToCart, но не пишите self.getProducts = function(category)?