From 1ab5f27d82ee5e048f27b9a9c3c06b2a095e6d8f Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Fri, 27 Jan 2023 12:35:34 +0300 Subject: [PATCH] Use providers instead of direct repository access for resetting features --- .../FeatureManagement/FeatureAppService.cs | 7 ++--- .../Abp/FeatureManagement/FeatureManager.cs | 31 +++++++++++++++++++ .../Abp/FeatureManagement/IFeatureManager.cs | 1 + 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs index bce61c679b..4b879a6436 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs @@ -14,18 +14,15 @@ public class FeatureAppService : FeatureManagementAppServiceBase, IFeatureAppSer { protected FeatureManagementOptions Options { get; } protected IFeatureManager FeatureManager { get; } - protected IFeatureValueRepository FeatureValueRepository { get; } protected IFeatureDefinitionManager FeatureDefinitionManager { get; } public FeatureAppService(IFeatureManager featureManager, IFeatureDefinitionManager featureDefinitionManager, - IOptions options, - IFeatureValueRepository featureValueRepository) + IOptions options) { FeatureManager = featureManager; FeatureDefinitionManager = featureDefinitionManager; Options = options.Value; - FeatureValueRepository = featureValueRepository; } public virtual async Task GetAsync([NotNull] string providerName, string providerKey) @@ -140,6 +137,6 @@ public class FeatureAppService : FeatureManagementAppServiceBase, IFeatureAppSer public virtual async Task DeleteAsync([NotNull] string providerName, string providerKey) { - await FeatureValueRepository.DeleteAsync(providerName, providerKey); + await FeatureManager.DeleteAsync(providerName, providerKey); } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs index 2c255071f7..90b8cb25fd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using System.Xml.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; @@ -215,4 +216,34 @@ public class FeatureManager : IFeatureManager, ISingletonDependency return featureNameValueWithGrantedProvider; } + + public async Task DeleteAsync(string providerName, string providerKey) + { + var featureNameValues = await GetAllAsync(providerName, providerKey); + + var providers = Enumerable + .Reverse(Providers) + .SkipWhile(p => p.Name != providerName) + .ToList(); + + if (!providers.Any()) + { + return; + } + + providers = providers + .TakeWhile(p => p.Name == providerName) + .ToList(); //Getting list for case of there are more than one provider with same providerName + + + foreach (var featureNameValue in featureNameValues) + { + var feature = await FeatureDefinitionManager.GetAsync(featureNameValue.Name); + + foreach (var provider in providers) + { + await provider.ClearAsync(feature, providerKey); + } + } + } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureManager.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureManager.cs index 577e9efa7e..4d911bfac4 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureManager.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureManager.cs @@ -15,4 +15,5 @@ public interface IFeatureManager Task> GetAllWithProviderAsync([NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); Task SetAsync([NotNull] string name, [CanBeNull] string value, [NotNull] string providerName, [CanBeNull] string providerKey, bool forceToSet = false); + Task DeleteAsync(string providerName, string providerKey); }