/** * 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, toString: function() { return this.id; } }; 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) { if (dbo == null) { return null; } dbo = Business.extendDeep({}, Business.defaultDbo, dbo); if (dbo.createdAt != null) { dbo.createdAt = new Date(dbo.createdAt); } if (dbo.updatedAt != null) { dbo.updatedAt = new Date(dbo.updatedAt); } return dbo; }; Business.initDbo = function(dbo) { return Business._initDbo(dbo); }; Business.initListDbo = function(list) { var d = []; for (var i = 0; i < list.length; ++i) { d.push(Business.initDbo(list[i])); } return d; }; Business.initPaginatedDbo = function(data) { var d = { count: data.count, data: Business.initListDbo(data.data) }; 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; }]); })();