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..1a5356a1be 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 @@ -215,4 +215,33 @@ public class FeatureManager : IFeatureManager, ISingletonDependency return featureNameValueWithGrantedProvider; } + + public virtual 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..7d9063bb92 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,6 @@ 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); } diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs index 0344a67440..831d021e38 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs @@ -195,4 +195,18 @@ public class FeatureManager_Tests : FeatureManagementDomainTestBase featureValue.ShouldNotBeNull(); featureValue.Value.ShouldBe(true.ToString().ToLower()); } + + [Fact] + public async Task DeleteAsync() + { + //Default + (await _featureManager.GetOrNullAsync(TestFeatureDefinitionProvider.BackupCount, TenantFeatureValueProvider.ProviderName, TestEditionIds.TenantId.ToString())).ShouldBe("0"); + + await _featureManager.SetAsync(TestFeatureDefinitionProvider.BackupCount, "2", TenantFeatureValueProvider.ProviderName, TestEditionIds.TenantId.ToString()); + (await _featureManager.GetOrNullAsync(TestFeatureDefinitionProvider.BackupCount, TenantFeatureValueProvider.ProviderName, TestEditionIds.TenantId.ToString())).ShouldBe("2"); + + await _featureManager.DeleteAsync(TenantFeatureValueProvider.ProviderName, TestEditionIds.TenantId.ToString()); + + (await _featureManager.GetOrNullAsync(TestFeatureDefinitionProvider.BackupCount, TenantFeatureValueProvider.ProviderName, TestEditionIds.TenantId.ToString())).ShouldBe("0"); + } }