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

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