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.

LuCrudBusiness.cs 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using System;
  2. using System.Collections.Generic;
  3. using Luticate2.Utils.Dbo.Basic;
  4. using Luticate2.Utils.Dbo.Filter;
  5. using Luticate2.Utils.Dbo.OrderBy;
  6. using Luticate2.Utils.Dbo.Result;
  7. using Luticate2.Utils.Interfaces;
  8. namespace Luticate2.Utils.Business
  9. {
  10. public abstract class LuCrudBusiness<TDataAccess, TDboCreate, TDboRead, TDboUpdate, TId> :
  11. LuBusiness,
  12. ILuCrudInterface<TDboCreate, TDboRead, TDboUpdate, TId>
  13. where TDataAccess : ILuCrudInterface<TDboCreate, TDboRead, TDboUpdate, TId>
  14. where TDboCreate : class
  15. where TDboRead : class
  16. where TDboUpdate : class
  17. {
  18. protected readonly TDataAccess DataAccess;
  19. protected LuCrudBusiness(TDataAccess dataAccess)
  20. {
  21. DataAccess = dataAccess;
  22. }
  23. protected virtual LuResult<TDboCreate> CheckAdd(TDboCreate obj)
  24. {
  25. return LuResult<TDboCreate>.Ok(obj);
  26. }
  27. protected virtual LuResult<IEnumerable<TDboCreate>> CheckAdd(IEnumerable<TDboCreate> objs)
  28. {
  29. var list = new List<TDboCreate>();
  30. foreach (var obj in objs)
  31. {
  32. var res = CheckAdd(obj);
  33. if (!res)
  34. {
  35. return res.To<IEnumerable<TDboCreate>>();
  36. }
  37. list.Add(res.Data);
  38. }
  39. return LuResult<IEnumerable<TDboCreate>>.Ok(list);
  40. }
  41. protected virtual LuResult<TDboUpdate> CheckEdit(TDboRead dbo, TDboUpdate update)
  42. {
  43. return LuResult<TDboUpdate>.Ok(update);
  44. }
  45. protected LuResult<TDboUpdate> GetAndCheckEdit(TId id, TDboUpdate update)
  46. {
  47. var res = GetSingleById(id);
  48. if (!res)
  49. {
  50. return res.To<TDboUpdate>();
  51. }
  52. return CheckEdit(res.Data, update);
  53. }
  54. public virtual LuResult<T> Add<T>(IEnumerable<TDboCreate> objs, Func<IEnumerable<TDboRead>, T> returnFunc)
  55. {
  56. var res = CheckAdd(objs);
  57. if (!res)
  58. {
  59. return res.To<T>();
  60. }
  61. return DataAccess.Add(res.Data, returnFunc);
  62. }
  63. public virtual LuResult<T> Add<T>(TDboCreate obj, Func<TDboRead, T> returnFunc)
  64. {
  65. var res = CheckAdd(obj);
  66. if (!res)
  67. {
  68. return res.To<T>();
  69. }
  70. return DataAccess.Add(res.Data, returnFunc);
  71. }
  72. public virtual LuResult<IEnumerable<TId>> AddId(IEnumerable<TDboCreate> objs)
  73. {
  74. var res = CheckAdd(objs);
  75. if (!res)
  76. {
  77. return res.To<IEnumerable<TId>>();
  78. }
  79. return DataAccess.AddId(res.Data);
  80. }
  81. public virtual LuResult<TId> AddId(TDboCreate obj)
  82. {
  83. var res = CheckAdd(obj);
  84. if (!res)
  85. {
  86. return res.To<TId>();
  87. }
  88. return DataAccess.AddId(res.Data);
  89. }
  90. public virtual LuResult<IEnumerable<TDboRead>> AddDbo(IEnumerable<TDboCreate> obj)
  91. {
  92. var res = CheckAdd(obj);
  93. if (!res)
  94. {
  95. return res.To<IEnumerable<TDboRead>>();
  96. }
  97. return DataAccess.AddDbo(res.Data);
  98. }
  99. public virtual LuResult<TDboRead> AddDbo(TDboCreate obj)
  100. {
  101. var res = CheckAdd(obj);
  102. if (!res)
  103. {
  104. return res.To<TDboRead>();
  105. }
  106. return DataAccess.AddDbo(res.Data);
  107. }
  108. public virtual LuResult<TDboRead> GetSingleById(TId id)
  109. {
  110. return DataAccess.GetSingleById(id);
  111. }
  112. public virtual LuResult<LuPaginatedDbo<TDboRead>> GetMultiple(LuOrderByDbo orderBy, LuFilterDbo filter,
  113. int page = 0, int perPage = int.MaxValue)
  114. {
  115. return DataAccess.GetMultiple(orderBy, filter, page, perPage);
  116. }
  117. public virtual LuResult<LuPaginatedDbo<TDboRead>> GetMultiple(LuOrderByDbo orderBy, int page = 0,
  118. int perPage = int.MaxValue)
  119. {
  120. return DataAccess.GetMultiple(orderBy, page, perPage);
  121. }
  122. public virtual LuResult<T> EditSingleById<T>(TId id, TDboUpdate update, Func<TDboRead, T> returnFunc)
  123. {
  124. var obj = GetAndCheckEdit(id, update);
  125. if (!obj)
  126. {
  127. return obj.To<T>();
  128. }
  129. return DataAccess.EditSingleById(id, obj.Data, returnFunc);
  130. }
  131. public virtual LuResult<TId> EditSingleByIdId(TId id, TDboUpdate update)
  132. {
  133. var obj = GetAndCheckEdit(id, update);
  134. if (!obj)
  135. {
  136. return obj.To<TId>();
  137. }
  138. return EditSingleById(id, obj.Data, read => (TId)((dynamic)read).Id);
  139. }
  140. public virtual LuResult<TDboRead> EditSingleByIdDbo(TId id, TDboUpdate update)
  141. {
  142. var obj = GetAndCheckEdit(id, update);
  143. if (!obj)
  144. {
  145. return obj.To<TDboRead>();
  146. }
  147. return EditSingleById(id, obj.Data, read => read);
  148. }
  149. public virtual LuResult<T> DeleteSingleById<T>(TId id, Func<TDboRead, T> returnFunc)
  150. {
  151. return DataAccess.DeleteSingleById(id, returnFunc);
  152. }
  153. public virtual LuResult<TId> DeleteSingleByIdId(TId id)
  154. {
  155. return DeleteSingleById(id, read => (TId)((dynamic)read).Id);
  156. }
  157. public virtual LuResult<TDboRead> DeleteSingleByIdDbo(TId id)
  158. {
  159. return DeleteSingleById(id, read => read);
  160. }
  161. }
  162. }