/** * Created by robin on 12/11/16. */ (function () { 'use strict'; angular.module('luticate2Utils') .factory('luWebApiCrudBusiness', ['luBusiness', '$q', function (luBusiness, $q) { var luWebApiCrudBusiness = {}; luWebApiCrudBusiness.create = function (dataAccess) { var Business = luBusiness.create(); Business.dataAccess = dataAccess; Business.defaultDbo = { id: null }; Business.extendDeep = function extendDeep(dst) { angular.forEach(arguments, function(obj) { if (obj !== dst) { angular.forEach(obj, function(value, key) { if (dst[key] && dst[key].constructor && dst[key].constructor === Object) { extendDeep(dst[key], value); } else { dst[key] = value; } }); } }); return dst; }; Business.initDbo = function(dbo) { return Business.extendDeep({}, Business.defaultDbo, dbo); }; Business.initPaginatedDbo = function(data) { var d = { count: data.count, data: [] }; for (var i = 0; i < data.data.length; ++i) { d.data.push(Business.initDbo(data.data[i])); } return d; }; Business.thenInitDbo = function(promise) { var deferred = $q.defer(); promise.then(function(data) { deferred.resolve(Business.initDbo(data)); }, deferred.reject); return deferred.promise; }; Business.thenInitPaginatedDbo = function(promise) { var deferred = $q.defer(); promise.then(function(data) { deferred.resolve(Business.initPaginatedDbo(data)); }, deferred.reject); return deferred.promise; }; Business.getSingleById = function (id, luBusyGroups) { return Business.thenInitDbo(Business.dataAccess.getSingleById(id, luBusyGroups)); }; Business.getMultiple = function (orderBy, filter, page, perPage, luBusyGroups) { return Business.thenInitPaginatedDbo(Business.dataAccess.getMultiple(orderBy, filter, page, perPage, luBusyGroups)); }; Business.addDbo = function(data, luBusyGroups) { return Business.thenInitDbo(Business.dataAccess.addDbo(data, luBusyGroups)); }; Business.editSingleByIdDbo = function(id, data, luBusyGroups) { return Business.thenInitDbo(Business.dataAccess.editSingleByIdDbo(id, data, luBusyGroups)); }; Business.deleteDbo = function(id, luBusyGroups) { return Business.thenInitDbo(Business.dataAccess.deleteDbo(id, luBusyGroups)); }; return Business; }; return luWebApiCrudBusiness; }]); })();