using Abp.Dependency; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.Linq; using Abp.Webhooks; namespace VberZero.Webhooks; /// /// Implements using repositories. /// public class WebhookSubscriptionsStore : IWebhookSubscriptionsStore, ITransientDependency { public IAsyncQueryableExecuter AsyncQueryableExecuter { get; set; } private readonly IRepository _webhookSubscriptionRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; public WebhookSubscriptionsStore( IRepository webhookSubscriptionRepository, IUnitOfWorkManager unitOfWorkManager) { _webhookSubscriptionRepository = webhookSubscriptionRepository; _unitOfWorkManager = unitOfWorkManager; AsyncQueryableExecuter = NullAsyncQueryableExecuter.Instance; } public virtual async Task GetAsync(Guid id) { return await _unitOfWorkManager.WithUnitOfWorkAsync(async () => await _webhookSubscriptionRepository.GetAsync(id)); } public virtual WebhookSubscriptionInfo Get(Guid id) { return _unitOfWorkManager.WithUnitOfWork(() => _webhookSubscriptionRepository.Get(id)); } public virtual async Task InsertAsync(WebhookSubscriptionInfo webhookInfo) { await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { await _webhookSubscriptionRepository.InsertAsync(webhookInfo); }); } public virtual void Insert(WebhookSubscriptionInfo webhookInfo) { _unitOfWorkManager.WithUnitOfWork(() => _webhookSubscriptionRepository.Insert(webhookInfo)); } public virtual async Task UpdateAsync(WebhookSubscriptionInfo webhookSubscription) { await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { await _webhookSubscriptionRepository.UpdateAsync(webhookSubscription); }); } public virtual void Update(WebhookSubscriptionInfo webhookSubscription) { _unitOfWorkManager.WithUnitOfWork(() => _webhookSubscriptionRepository.Update(webhookSubscription)); } public virtual async Task DeleteAsync(Guid id) { await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { await _webhookSubscriptionRepository.DeleteAsync(id); }); } public virtual void Delete(Guid id) { _unitOfWorkManager.WithUnitOfWork(() => _webhookSubscriptionRepository.Delete(id)); } public virtual async Task> GetAllSubscriptionsAsync(int? tenantId) { return await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { return await _webhookSubscriptionRepository.GetAllListAsync(subscriptionInfo => subscriptionInfo.TenantId == tenantId); }); } public virtual List GetAllSubscriptions(int? tenantId) { return _unitOfWorkManager.WithUnitOfWork(() => { return _webhookSubscriptionRepository.GetAllList(subscriptionInfo => subscriptionInfo.TenantId == tenantId); }); } public virtual async Task> GetAllSubscriptionsAsync( int? tenantId, string webhookName) { return await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { return await _webhookSubscriptionRepository.GetAllListAsync(subscriptionInfo => subscriptionInfo.TenantId == tenantId && subscriptionInfo.IsActive && subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"") ); }); } public virtual List GetAllSubscriptions(int? tenantId, string webhookName) { return _unitOfWorkManager.WithUnitOfWork(() => { return _webhookSubscriptionRepository.GetAllList(subscriptionInfo => subscriptionInfo.TenantId == tenantId && subscriptionInfo.IsActive && subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"") ); }); } public virtual async Task> GetAllSubscriptionsOfTenantsAsync(int?[] tenantIds) { return await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { return await _webhookSubscriptionRepository.GetAllListAsync(subscriptionInfo => tenantIds.Contains(subscriptionInfo.TenantId) ); }); } public virtual List GetAllSubscriptionsOfTenants(int?[] tenantIds) { return _unitOfWorkManager.WithUnitOfWork(() => { return _webhookSubscriptionRepository.GetAllList(subscriptionInfo => tenantIds.Contains(subscriptionInfo.TenantId) ); }); } public virtual async Task> GetAllSubscriptionsOfTenantsAsync( int?[] tenantIds, string webhookName) { return await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { return await _webhookSubscriptionRepository.GetAllListAsync(subscriptionInfo => subscriptionInfo.IsActive && tenantIds.Contains(subscriptionInfo.TenantId) && subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"") ); }); } public virtual List GetAllSubscriptionsOfTenants(int?[] tenantIds, string webhookName) { return _unitOfWorkManager.WithUnitOfWork(() => { return _webhookSubscriptionRepository.GetAllList(subscriptionInfo => subscriptionInfo.IsActive && tenantIds.Contains(subscriptionInfo.TenantId) && subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"") ); }); } public virtual async Task IsSubscribedAsync(int? tenantId, string webhookName) { return await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { return await AsyncQueryableExecuter.AnyAsync(_webhookSubscriptionRepository.GetAll() .Where(subscriptionInfo => subscriptionInfo.TenantId == tenantId && subscriptionInfo.IsActive && subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"") )); }); } public virtual bool IsSubscribed(int? tenantId, string webhookName) { return _unitOfWorkManager.WithUnitOfWork(() => { return _webhookSubscriptionRepository.GetAll() .Any(subscriptionInfo => subscriptionInfo.TenantId == tenantId && subscriptionInfo.IsActive && subscriptionInfo.Webhooks.Contains("\"" + webhookName + "\"") ); }); } }