您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

lu-webapi-crud-dataaccess.js 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. /**
  2. * Created by robin on 12/11/16.
  3. */
  4. (function () {
  5. 'use strict';
  6. angular.module('luticate2Utils')
  7. .factory('luWebApiCrudDataAccess', ['luWebApiDataAccess', '$q', 'luUtilsDataAccess',
  8. function (luWebApiDataAccess, $q, luUtilsDataAccess) {
  9. var luWebApiCrudDataAccess = {};
  10. luWebApiCrudDataAccess.create = function (entry_point) {
  11. var DataAccess = luWebApiDataAccess.create(entry_point);
  12. DataAccess.OP_EDIT = 'OP_EDIT';
  13. DataAccess.OP_ADD = 'OP_ADD';
  14. DataAccess._initModel = function(model, op)
  15. {
  16. if (model == null) {
  17. return null;
  18. }
  19. model = angular.copy(model);
  20. delete model.id;
  21. delete model.updatedAt;
  22. delete model.createdAt;
  23. delete model._itemType;
  24. delete model.toString;
  25. return model;
  26. };
  27. DataAccess.initModel = function(model, op)
  28. {
  29. return DataAccess._initModel(model, op);
  30. };
  31. DataAccess.initListModel = function(list, op)
  32. {
  33. var d = [];
  34. for (var i = 0; i < list.length; ++i) {
  35. d.push(DataAccess.initModel(list[i], op));
  36. }
  37. return d;
  38. };
  39. DataAccess.initPaginatedModel = function(data, op)
  40. {
  41. var d = {
  42. count: data.count,
  43. data: DataAccess.initListModel(data.data, op)
  44. };
  45. return d;
  46. };
  47. DataAccess.thenInitModel = function(promise, op)
  48. {
  49. var deferred = $q.defer();
  50. promise.then(function(data)
  51. {
  52. deferred.resolve(DataAccess.initModel(data, op));
  53. }, deferred.reject);
  54. return deferred.promise;
  55. };
  56. DataAccess.thenInitListModel = function(promise, op)
  57. {
  58. var deferred = $q.defer();
  59. promise.then(function(data)
  60. {
  61. deferred.resolve(DataAccess.initListModel(data, op));
  62. }, deferred.reject);
  63. return deferred.promise;
  64. };
  65. DataAccess.thenInitPaginatedModel = function(promise, op)
  66. {
  67. var deferred = $q.defer();
  68. promise.then(function(data)
  69. {
  70. deferred.resolve(DataAccess.initPaginatedModel(data, op));
  71. }, deferred.reject);
  72. return deferred.promise;
  73. };
  74. DataAccess.defaultDbo = {
  75. id: null,
  76. createdAt: null,
  77. updatedAt: null,
  78. toString: function()
  79. {
  80. return this.id;
  81. }
  82. };
  83. DataAccess.extendDeep = function extendDeep(dst) {
  84. angular.forEach(arguments, function(obj) {
  85. if (obj !== dst) {
  86. angular.forEach(obj, function(value, key) {
  87. if (dst[key] && dst[key].constructor && dst[key].constructor === Object) {
  88. extendDeep(dst[key], value);
  89. } else {
  90. dst[key] = value;
  91. }
  92. });
  93. }
  94. });
  95. return dst;
  96. };
  97. DataAccess._initDbo = function(model)
  98. {
  99. if (model == null) {
  100. return null;
  101. }
  102. var dbo = DataAccess.extendDeep({}, DataAccess.defaultDbo, model);
  103. dbo.createdAt = luUtilsDataAccess.stringToMomentDateTime(dbo.createdAt);
  104. dbo.updatedAt = luUtilsDataAccess.stringToMomentDateTime(dbo.updatedAt);
  105. return dbo;
  106. };
  107. DataAccess.initDbo = function(model)
  108. {
  109. return DataAccess._initDbo(model);
  110. };
  111. DataAccess.initListDbo = function(list)
  112. {
  113. var d = [];
  114. for (var i = 0; i < list.length; ++i) {
  115. d.push(DataAccess.initDbo(list[i]));
  116. }
  117. return d;
  118. };
  119. DataAccess.initPaginatedDbo = function(data)
  120. {
  121. var d = {
  122. count: data.count,
  123. data: DataAccess.initListDbo(data.data)
  124. };
  125. return d;
  126. };
  127. DataAccess.thenInitDbo = function(promise)
  128. {
  129. var deferred = $q.defer();
  130. promise.then(function(data)
  131. {
  132. deferred.resolve(DataAccess.initDbo(data));
  133. }, deferred.reject);
  134. return deferred.promise;
  135. };
  136. DataAccess.thenInitListDbo = function(promise)
  137. {
  138. var deferred = $q.defer();
  139. promise.then(function(data)
  140. {
  141. deferred.resolve(DataAccess.initListDbo(data));
  142. }, deferred.reject);
  143. return deferred.promise;
  144. };
  145. DataAccess.thenInitPaginatedDbo = function(promise)
  146. {
  147. var deferred = $q.defer();
  148. promise.then(function(data)
  149. {
  150. deferred.resolve(DataAccess.initPaginatedDbo(data));
  151. }, deferred.reject);
  152. return deferred.promise;
  153. };
  154. DataAccess.getSingleById = function (id, luBusyGroups) {
  155. return DataAccess.thenInitDbo(DataAccess.get(id, null, luBusyGroups));
  156. };
  157. DataAccess.getMultiple = function (orderBy, filter, page, perPage, luBusyGroups) {
  158. return DataAccess.thenInitPaginatedDbo(DataAccess.get('', {
  159. orderBy: orderBy,
  160. filter: filter,
  161. page: page,
  162. perPage: perPage
  163. }, luBusyGroups));
  164. };
  165. DataAccess.addDbo = function(data, luBusyGroups) {
  166. var model = DataAccess.initModel(data, DataAccess.OP_ADD);
  167. return DataAccess.thenInitDbo(DataAccess.post('', null, model, luBusyGroups));
  168. };
  169. DataAccess.editSingleByIdDbo = function(id, data, luBusyGroups) {
  170. var model = DataAccess.initModel(data, DataAccess.OP_EDIT);
  171. return DataAccess.thenInitDbo(DataAccess.post(id, null, model, luBusyGroups));
  172. };
  173. DataAccess.deleteDbo = function(id, luBusyGroups) {
  174. return DataAccess.thenInitDbo(DataAccess.delete(id, null, null, luBusyGroups));
  175. };
  176. return DataAccess;
  177. };
  178. return luWebApiCrudDataAccess;
  179. }]);
  180. })();