/** * Created by robin on 12/11/16. */ (function () { 'use strict'; angular.module('luticate2Utils') .factory('luWebApiCrudDataAccess', ['luWebApiDataAccess', '$q', 'luUtilsDataAccess', function (luWebApiDataAccess, $q, luUtilsDataAccess) { var luWebApiCrudDataAccess = {}; luWebApiCrudDataAccess.create = function (entry_point) { var DataAccess = luWebApiDataAccess.create(entry_point); DataAccess._initModel = function(model) { if (model == null) { return null; } model = angular.copy(model); delete model.id; delete model.updatedAt; delete model.createdAt; delete model.toString; return model; }; DataAccess.initModel = function(model) { return DataAccess._initModel(model); }; DataAccess.initListModel = function(list) { var d = []; for (var i = 0; i < list.length; ++i) { d.push(DataAccess.initModel(list[i])); } return d; }; DataAccess.initPaginatedModel = function(data) { var d = { count: data.count, data: DataAccess.initListModel(data.data) }; return d; }; DataAccess.thenInitModel = function(promise) { var deferred = $q.defer(); promise.then(function(data) { deferred.resolve(DataAccess.initModel(data)); }, deferred.reject); return deferred.promise; }; DataAccess.thenInitListModel = function(promise) { var deferred = $q.defer(); promise.then(function(data) { deferred.resolve(DataAccess.initListModel(data)); }, deferred.reject); return deferred.promise; }; DataAccess.thenInitPaginatedModel = function(promise) { var deferred = $q.defer(); promise.then(function(data) { deferred.resolve(DataAccess.initPaginatedModel(data)); }, deferred.reject); return deferred.promise; }; DataAccess.defaultDbo = { id: null, createdAt: null, updatedAt: null, toString: function() { return this.id; } }; DataAccess.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; }; DataAccess._initDbo = function(model) { if (model == null) { return null; } var dbo = DataAccess.extendDeep({}, DataAccess.defaultDbo, model); dbo.createdAt = luUtilsDataAccess.stringToMomentDateTime(dbo.createdAt); dbo.updatedAt = luUtilsDataAccess.stringToMomentDateTime(dbo.updatedAt); return dbo; }; DataAccess.initDbo = function(model) { return DataAccess._initDbo(model); }; DataAccess.initListDbo = function(list) { var d = []; for (var i = 0; i < list.length; ++i) { d.push(DataAccess.initDbo(list[i])); } return d; }; DataAccess.initPaginatedDbo = function(data) { var d = { count: data.count, data: DataAccess.initListDbo(data.data) }; return d; }; DataAccess.thenInitDbo = function(promise) { var deferred = $q.defer(); promise.then(function(data) { deferred.resolve(DataAccess.initDbo(data)); }, deferred.reject); return deferred.promise; }; DataAccess.thenInitListDbo = function(promise) { var deferred = $q.defer(); promise.then(function(data) { deferred.resolve(DataAccess.initListDbo(data)); }, deferred.reject); return deferred.promise; }; DataAccess.thenInitPaginatedDbo = function(promise) { var deferred = $q.defer(); promise.then(function(data) { deferred.resolve(DataAccess.initPaginatedDbo(data)); }, deferred.reject); return deferred.promise; }; DataAccess.getSingleById = function (id, luBusyGroups) { return DataAccess.thenInitDbo(DataAccess.get(id, null, luBusyGroups)); }; DataAccess.getMultiple = function (orderBy, filter, page, perPage, luBusyGroups) { return DataAccess.thenInitPaginatedDbo(DataAccess.get('', { orderBy: orderBy, filter: filter, page: page, perPage: perPage }, luBusyGroups)); }; DataAccess.addDbo = function(data, luBusyGroups) { var model = DataAccess.initModel(data); return DataAccess.thenInitDbo(DataAccess.post('', null, model, luBusyGroups)); }; DataAccess.editSingleByIdDbo = function(id, data, luBusyGroups) { var model = DataAccess.initModel(data); return DataAccess.thenInitDbo(DataAccess.post(id, null, model, luBusyGroups)); }; DataAccess.deleteDbo = function(id, luBusyGroups) { return DataAccess.thenInitDbo(DataAccess.delete(id, null, null, luBusyGroups)); }; return DataAccess; }; return luWebApiCrudDataAccess; }]); })();