Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

lu-webapi-crud-dataaccess.js 7.3KB

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', function (luWebApiDataAccess, $q) {
  8. var luWebApiCrudDataAccess = {};
  9. luWebApiCrudDataAccess.create = function (entry_point) {
  10. var DataAccess = luWebApiDataAccess.create(entry_point);
  11. DataAccess._initModel = function(model)
  12. {
  13. if (model == null) {
  14. return null;
  15. }
  16. model = angular.copy(model);
  17. delete model.id;
  18. delete model.updatedAt;
  19. delete model.createdAt;
  20. delete model.toString;
  21. return model;
  22. };
  23. DataAccess.initModel = function(model)
  24. {
  25. return DataAccess._initModel(model);
  26. };
  27. DataAccess.initListModel = function(list)
  28. {
  29. var d = [];
  30. for (var i = 0; i < list.length; ++i) {
  31. d.push(DataAccess.initModel(list[i]));
  32. }
  33. return d;
  34. };
  35. DataAccess.initPaginatedModel = function(data)
  36. {
  37. var d = {
  38. count: data.count,
  39. data: DataAccess.initListModel(data.data)
  40. };
  41. return d;
  42. };
  43. DataAccess.thenInitModel = function(promise)
  44. {
  45. var deferred = $q.defer();
  46. promise.then(function(data)
  47. {
  48. deferred.resolve(DataAccess.initModel(data));
  49. }, deferred.reject);
  50. return deferred.promise;
  51. };
  52. DataAccess.thenInitListModel = function(promise)
  53. {
  54. var deferred = $q.defer();
  55. promise.then(function(data)
  56. {
  57. deferred.resolve(DataAccess.initListModel(data));
  58. }, deferred.reject);
  59. return deferred.promise;
  60. };
  61. DataAccess.thenInitPaginatedModel = function(promise)
  62. {
  63. var deferred = $q.defer();
  64. promise.then(function(data)
  65. {
  66. deferred.resolve(DataAccess.initPaginatedModel(data));
  67. }, deferred.reject);
  68. return deferred.promise;
  69. };
  70. DataAccess.defaultDbo = {
  71. id: null,
  72. toString: function()
  73. {
  74. return this.id;
  75. }
  76. };
  77. DataAccess.extendDeep = function extendDeep(dst) {
  78. angular.forEach(arguments, function(obj) {
  79. if (obj !== dst) {
  80. angular.forEach(obj, function(value, key) {
  81. if (dst[key] && dst[key].constructor && dst[key].constructor === Object) {
  82. extendDeep(dst[key], value);
  83. } else {
  84. dst[key] = value;
  85. }
  86. });
  87. }
  88. });
  89. return dst;
  90. };
  91. DataAccess._initDbo = function(dbo)
  92. {
  93. if (dbo == null) {
  94. return null;
  95. }
  96. dbo = DataAccess.extendDeep({}, DataAccess.defaultDbo, dbo);
  97. if (dbo.createdAt != null) {
  98. dbo.createdAt = new Date(dbo.createdAt);
  99. }
  100. if (dbo.updatedAt != null) {
  101. dbo.updatedAt = new Date(dbo.updatedAt);
  102. }
  103. return dbo;
  104. };
  105. DataAccess.initDbo = function(dbo)
  106. {
  107. return DataAccess._initDbo(dbo);
  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. })();