diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/IFeatureAppService.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/IFeatureAppService.cs index 20583f7476..1b7f1fbd27 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/IFeatureAppService.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/IFeatureAppService.cs @@ -9,4 +9,6 @@ public interface IFeatureAppService : IApplicationService Task GetAsync([NotNull] string providerName, string providerKey); Task UpdateAsync([NotNull] string providerName, string providerKey, UpdateFeaturesDto input); + + Task ResetToDefaultAsync(); } 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 c21f40fb65..e126a09514 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 @@ -15,15 +15,18 @@ 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) + IOptions options, + IFeatureValueRepository featureValueRepository) { FeatureManager = featureManager; FeatureDefinitionManager = featureDefinitionManager; Options = options.Value; + FeatureValueRepository = featureValueRepository; } public virtual async Task GetAsync([NotNull] string providerName, string providerKey) @@ -135,4 +138,9 @@ public class FeatureAppService : FeatureManagementAppServiceBase, IFeatureAppSer await AuthorizationService.CheckAsync(policyName); } + + public virtual async Task ResetToDefaultAsync() + { + await FeatureValueRepository.DeleteAsync(); + } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureValueRepository.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureValueRepository.cs index 022d8a1394..91292ee273 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureValueRepository.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureValueRepository.cs @@ -24,4 +24,7 @@ public interface IFeatureValueRepository : IBasicRepository string providerName, string providerKey, CancellationToken cancellationToken = default); + + Task DeleteAsync( + CancellationToken cancellationToken = default); } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs index 3ef0cdde96..d55243e4e0 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Polly; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -49,4 +50,11 @@ public class EfCoreFeatureValueRepository : EfCoreRepository s.ProviderName == providerName && s.ProviderKey == providerKey ).ToListAsync(GetCancellationToken(cancellationToken)); } + + public async Task DeleteAsync(CancellationToken cancellationToken = default) + { + var entities = await (await GetDbSetAsync()).ToListAsync(GetCancellationToken(cancellationToken)); + (await GetDbSetAsync()).RemoveRange(entities); + await (await GetDbContextAsync()).SaveChangesAsync(cancellationToken); + } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/FeaturesController.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/FeaturesController.cs index 0514579540..045516a6b8 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/FeaturesController.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/FeaturesController.cs @@ -27,4 +27,9 @@ public class FeaturesController : AbpControllerBase, IFeatureAppService { return FeatureAppService.UpdateAsync(providerName, providerKey, input); } + + public Task ResetToDefaultAsync() + { + return FeatureAppService.ResetToDefaultAsync(); + } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs index 9d9071ea1a..7a02c53c36 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; @@ -49,4 +51,11 @@ public class MongoFeatureValueRepository : .Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey) .ToListAsync(GetCancellationToken(cancellationToken)); } + + public virtual async Task DeleteAsync(CancellationToken cancellationToken = default) + { + //TODO check it again + var entities = await AsyncExecuter.ToListAsync((await GetQueryableAsync()).Select(p => p.Id)); + await DeleteManyAsync(entities, true, GetCancellationToken(cancellationToken)); + } }