You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

lu-webapi-crud-dataaccess.js 7.4KB

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