WebhookSubscriptionsStore.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. using Abp.Dependency;
  2. using Abp.Domain.Repositories;
  3. using Abp.Domain.Uow;
  4. using Abp.Linq;
  5. using Abp.Webhooks;
  6. namespace VberZero.Webhooks;
  7. /// <summary>
  8. /// Implements <see cref="IWebhookSubscriptionsStore"/> using repositories.
  9. /// </summary>
  10. public class WebhookSubscriptionsStore : IWebhookSubscriptionsStore, ITransientDependency
  11. {
  12. public IAsyncQueryableExecuter AsyncQueryableExecuter { get; set; }
  13. private readonly IRepository<WebhookSubscriptionInfo, Guid> _webhookSubscriptionRepository;
  14. private readonly IUnitOfWorkManager _unitOfWorkManager;
  15. public WebhookSubscriptionsStore(
  16. IRepository<WebhookSubscriptionInfo, Guid> webhookSubscriptionRepository,
  17. IUnitOfWorkManager unitOfWorkManager)
  18. {
  19. _webhookSubscriptionRepository = webhookSubscriptionRepository;
  20. _unitOfWorkManager = unitOfWorkManager;
  21. AsyncQueryableExecuter = NullAsyncQueryableExecuter.Instance;
  22. }
  23. public virtual async Task<WebhookSubscriptionInfo> GetAsync(Guid id)
  24. {
  25. return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  26. await _webhookSubscriptionRepository.GetAsync(id));
  27. }
  28. public virtual WebhookSubscriptionInfo Get(Guid id)
  29. {
  30. return _unitOfWorkManager.WithUnitOfWork(() => _webhookSubscriptionRepository.Get(id));
  31. }
  32. public virtual async Task InsertAsync(WebhookSubscriptionInfo webhookInfo)
  33. {
  34. await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  35. {
  36. await _webhookSubscriptionRepository.InsertAsync(webhookInfo);
  37. });
  38. }
  39. public virtual void Insert(WebhookSubscriptionInfo webhookInfo)
  40. {
  41. _unitOfWorkManager.WithUnitOfWork(() => _webhookSubscriptionRepository.Insert(webhookInfo));
  42. }
  43. public virtual async Task UpdateAsync(WebhookSubscriptionInfo webhookSubscription)
  44. {
  45. await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  46. {
  47. await _webhookSubscriptionRepository.UpdateAsync(webhookSubscription);
  48. });
  49. }
  50. public virtual void Update(WebhookSubscriptionInfo webhookSubscription)
  51. {
  52. _unitOfWorkManager.WithUnitOfWork(() => _webhookSubscriptionRepository.Update(webhookSubscription));
  53. }
  54. public virtual async Task DeleteAsync(Guid id)
  55. {
  56. await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  57. {
  58. await _webhookSubscriptionRepository.DeleteAsync(id);
  59. });
  60. }
  61. public virtual void Delete(Guid id)
  62. {
  63. _unitOfWorkManager.WithUnitOfWork(() => _webhookSubscriptionRepository.Delete(id));
  64. }
  65. public virtual async Task<List<WebhookSubscriptionInfo>> GetAllSubscriptionsAsync(int? tenantId)
  66. {
  67. return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  68. {
  69. return await _webhookSubscriptionRepository.GetAllListAsync(subscriptionInfo =>
  70. subscriptionInfo.TenantId == tenantId);
  71. });
  72. }
  73. public virtual List<WebhookSubscriptionInfo> GetAllSubscriptions(int? tenantId)
  74. {
  75. return _unitOfWorkManager.WithUnitOfWork(() =>
  76. {
  77. return _webhookSubscriptionRepository.GetAllList(subscriptionInfo =>
  78. subscriptionInfo.TenantId == tenantId);
  79. });
  80. }
  81. public virtual async Task<List<WebhookSubscriptionInfo>> GetAllSubscriptionsAsync(
  82. int? tenantId,
  83. string webhookName)
  84. {
  85. return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  86. {
  87. return await _webhookSubscriptionRepository.GetAllListAsync(subscriptionInfo =>
  88. subscriptionInfo.TenantId == tenantId &&
  89. subscriptionInfo.IsActive &&
  90. subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"")
  91. );
  92. });
  93. }
  94. public virtual List<WebhookSubscriptionInfo> GetAllSubscriptions(int? tenantId, string webhookName)
  95. {
  96. return _unitOfWorkManager.WithUnitOfWork(() =>
  97. {
  98. return _webhookSubscriptionRepository.GetAllList(subscriptionInfo =>
  99. subscriptionInfo.TenantId == tenantId &&
  100. subscriptionInfo.IsActive &&
  101. subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"")
  102. );
  103. });
  104. }
  105. public virtual async Task<List<WebhookSubscriptionInfo>> GetAllSubscriptionsOfTenantsAsync(int?[] tenantIds)
  106. {
  107. return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  108. {
  109. return await _webhookSubscriptionRepository.GetAllListAsync(subscriptionInfo =>
  110. tenantIds.Contains(subscriptionInfo.TenantId)
  111. );
  112. });
  113. }
  114. public virtual List<WebhookSubscriptionInfo> GetAllSubscriptionsOfTenants(int?[] tenantIds)
  115. {
  116. return _unitOfWorkManager.WithUnitOfWork(() =>
  117. {
  118. return _webhookSubscriptionRepository.GetAllList(subscriptionInfo =>
  119. tenantIds.Contains(subscriptionInfo.TenantId)
  120. );
  121. });
  122. }
  123. public virtual async Task<List<WebhookSubscriptionInfo>> GetAllSubscriptionsOfTenantsAsync(
  124. int?[] tenantIds,
  125. string webhookName)
  126. {
  127. return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  128. {
  129. return await _webhookSubscriptionRepository.GetAllListAsync(subscriptionInfo =>
  130. subscriptionInfo.IsActive &&
  131. tenantIds.Contains(subscriptionInfo.TenantId) &&
  132. subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"")
  133. );
  134. });
  135. }
  136. public virtual List<WebhookSubscriptionInfo> GetAllSubscriptionsOfTenants(int?[] tenantIds, string webhookName)
  137. {
  138. return _unitOfWorkManager.WithUnitOfWork(() =>
  139. {
  140. return _webhookSubscriptionRepository.GetAllList(subscriptionInfo =>
  141. subscriptionInfo.IsActive &&
  142. tenantIds.Contains(subscriptionInfo.TenantId) &&
  143. subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"")
  144. );
  145. });
  146. }
  147. public virtual async Task<bool> IsSubscribedAsync(int? tenantId, string webhookName)
  148. {
  149. return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  150. {
  151. return await AsyncQueryableExecuter.AnyAsync(_webhookSubscriptionRepository.GetAll()
  152. .Where(subscriptionInfo =>
  153. subscriptionInfo.TenantId == tenantId &&
  154. subscriptionInfo.IsActive &&
  155. subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"")
  156. ));
  157. });
  158. }
  159. public virtual bool IsSubscribed(int? tenantId, string webhookName)
  160. {
  161. return _unitOfWorkManager.WithUnitOfWork(() =>
  162. {
  163. return _webhookSubscriptionRepository.GetAll()
  164. .Any(subscriptionInfo =>
  165. subscriptionInfo.TenantId == tenantId &&
  166. subscriptionInfo.IsActive &&
  167. subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"")
  168. );
  169. });
  170. }
  171. }