Browse Source

Use providers instead of direct repository access for resetting features

pull/15524/head
Enis Necipoglu 4 years ago
parent
commit
1ab5f27d82
  1. 7
      modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs
  2. 31
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs
  3. 1
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureManager.cs

7
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 FeatureManagementOptions Options { get; }
protected IFeatureManager FeatureManager { get; } protected IFeatureManager FeatureManager { get; }
protected IFeatureValueRepository FeatureValueRepository { get; }
protected IFeatureDefinitionManager FeatureDefinitionManager { get; } protected IFeatureDefinitionManager FeatureDefinitionManager { get; }
public FeatureAppService(IFeatureManager featureManager, public FeatureAppService(IFeatureManager featureManager,
IFeatureDefinitionManager featureDefinitionManager, IFeatureDefinitionManager featureDefinitionManager,
IOptions<FeatureManagementOptions> options, IOptions<FeatureManagementOptions> options)
IFeatureValueRepository featureValueRepository)
{ {
FeatureManager = featureManager; FeatureManager = featureManager;
FeatureDefinitionManager = featureDefinitionManager; FeatureDefinitionManager = featureDefinitionManager;
Options = options.Value; Options = options.Value;
FeatureValueRepository = featureValueRepository;
} }
public virtual async Task<GetFeatureListResultDto> GetAsync([NotNull] string providerName, string providerKey) public virtual async Task<GetFeatureListResultDto> 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) public virtual async Task DeleteAsync([NotNull] string providerName, string providerKey)
{ {
await FeatureValueRepository.DeleteAsync(providerName, providerKey); await FeatureManager.DeleteAsync(providerName, providerKey);
} }
} }

31
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.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -215,4 +216,34 @@ public class FeatureManager : IFeatureManager, ISingletonDependency
return featureNameValueWithGrantedProvider; 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);
}
}
}
} }

1
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureManager.cs

@ -15,4 +15,5 @@ public interface IFeatureManager
Task<List<FeatureNameValueWithGrantedProvider>> GetAllWithProviderAsync([NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); Task<List<FeatureNameValueWithGrantedProvider>> 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 SetAsync([NotNull] string name, [CanBeNull] string value, [NotNull] string providerName, [CanBeNull] string providerKey, bool forceToSet = false);
Task DeleteAsync(string providerName, string providerKey);
} }

Loading…
Cancel
Save