From 008f42f08fbf2f5c0328d50df77dcfacaae52b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 9 Feb 2018 12:56:35 +0300 Subject: [PATCH] Enhancements on settings. --- Volo.Abp.sln | 7 ++++ .../EntityFrameworkCore/IdentityDbContext.cs | 6 --- .../Abp/Session/UserSettingValueProvider.cs | 20 ++++----- .../Settings/UserSettingManagerExtensions.cs | 12 +++--- .../Volo.Abp.Settings.Domain.Shared.csproj | 20 +++++++++ .../Settings/AbpSettingsDomainSharedModule.cs | 13 ++++++ .../Volo/Abp/Settings/SettingsConsts.cs | 10 +++++ .../Volo.Abp.Settings.Domain.csproj | 1 + .../Volo/Abp/Settings/AbpSettingsConsts.cs | 9 ++++ .../Abp/Settings/AbpSettingsDomainModule.cs | 1 + .../Volo/Abp/Settings/ISettingRepository.cs | 4 +- .../Volo/Abp/Settings/Setting.cs | 12 +++--- .../Volo/Abp/Settings/SettingStore.cs | 18 ++++---- .../AbpSettingsDbContext.cs | 10 +++++ ...SettingsDbContextModelBuilderExtensions.cs | 33 +++++++++++++++ .../EfCoreSettingRepository.cs | 8 ++-- .../DefaultValueSettingValueProvider.cs | 10 +++-- .../GlobalSettingManagerExtensions.cs | 6 +-- .../Settings/GlobalSettingValueProvider.cs | 16 +++---- .../Volo/Abp/Settings/ISettingManager.cs | 6 +-- .../Volo/Abp/Settings/ISettingStore.cs | 8 ++-- .../Abp/Settings/ISettingValueProvider.cs | 8 ++-- .../Volo/Abp/Settings/NullSettingStore.cs | 8 ++-- .../Volo/Abp/Settings/SettingManager.cs | 42 +++++++++---------- .../Volo/Abp/Settings/SettingValueProvider.cs | 8 ++-- .../AbpIdentityApplicationTestBase.cs | 4 +- .../Settings/AbpIdentityTestDataBuilder.cs | 12 +++--- .../Abp/Settings/SettingManager_User_Tests.cs | 8 ++-- 28 files changed, 210 insertions(+), 110 deletions(-) create mode 100644 src/Volo.Abp.Settings.Domain.Shared/Volo.Abp.Settings.Domain.Shared.csproj create mode 100644 src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/AbpSettingsDomainSharedModule.cs create mode 100644 src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/SettingsConsts.cs create mode 100644 src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsConsts.cs create mode 100644 src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContextModelBuilderExtensions.cs diff --git a/Volo.Abp.sln b/Volo.Abp.sln index 2aebb01576..b709a43440 100644 --- a/Volo.Abp.sln +++ b/Volo.Abp.sln @@ -254,6 +254,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Settings.Domain", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Settings.Tests", "test\Volo.Abp.Settings.Tests\Volo.Abp.Settings.Tests.csproj", "{61422EC8-8FFB-48EA-B4B5-527E29077930}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Settings.Domain.Shared", "src\Volo.Abp.Settings.Domain.Shared\Volo.Abp.Settings.Domain.Shared.csproj", "{27F990E2-6820-4159-B54A-59C8ADED8D28}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -664,6 +666,10 @@ Global {61422EC8-8FFB-48EA-B4B5-527E29077930}.Debug|Any CPU.Build.0 = Debug|Any CPU {61422EC8-8FFB-48EA-B4B5-527E29077930}.Release|Any CPU.ActiveCfg = Release|Any CPU {61422EC8-8FFB-48EA-B4B5-527E29077930}.Release|Any CPU.Build.0 = Release|Any CPU + {27F990E2-6820-4159-B54A-59C8ADED8D28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27F990E2-6820-4159-B54A-59C8ADED8D28}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27F990E2-6820-4159-B54A-59C8ADED8D28}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27F990E2-6820-4159-B54A-59C8ADED8D28}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -787,6 +793,7 @@ Global {1DCD9600-215A-4A94-AEFD-577568D62633} = {4C753F64-0C93-4D65-96C2-A40893AFC1E8} {837BC537-3AEC-4F6D-9D64-9704F64D0E1E} = {4C753F64-0C93-4D65-96C2-A40893AFC1E8} {61422EC8-8FFB-48EA-B4B5-527E29077930} = {37087D1B-3693-4E96-983D-A69F210BDE53} + {27F990E2-6820-4159-B54A-59C8ADED8D28} = {4C753F64-0C93-4D65-96C2-A40893AFC1E8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs index 18aa2952c1..03b5dea2af 100644 --- a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs @@ -59,12 +59,6 @@ namespace Volo.Abp.Identity.EntityFrameworkCore } - /// - /// Configures the schema needed for the identity framework. - /// - /// - /// The builder being used to construct the model for this context. - /// protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); diff --git a/src/Volo.Abp.Session/Volo/Abp/Session/UserSettingValueProvider.cs b/src/Volo.Abp.Session/Volo/Abp/Session/UserSettingValueProvider.cs index 56e1992f73..87217d3478 100644 --- a/src/Volo.Abp.Session/Volo/Abp/Session/UserSettingValueProvider.cs +++ b/src/Volo.Abp.Session/Volo/Abp/Session/UserSettingValueProvider.cs @@ -7,9 +7,9 @@ namespace Volo.Abp.Session public class UserSettingValueProvider : SettingValueProvider { - public const string DefaultEntityType = "User"; + public const string ProviderName = "User"; - public override string EntityType => DefaultEntityType; + public override string Name => ProviderName; protected ICurrentUser CurrentUser { get; } @@ -19,29 +19,29 @@ namespace Volo.Abp.Session CurrentUser = currentUser; } - public override async Task GetOrNullAsync(SettingDefinition setting, string entityId) + public override async Task GetOrNullAsync(SettingDefinition setting, string providerKey) { - if (entityId == null) + if (providerKey == null) { if (CurrentUser.Id == null) { return null; } - entityId = CurrentUser.Id.ToString(); + providerKey = CurrentUser.Id.ToString(); } - return await SettingStore.GetOrNullAsync(setting.Name, EntityType, entityId); + return await SettingStore.GetOrNullAsync(setting.Name, Name, providerKey); } - public override Task SetAsync(SettingDefinition setting, string value, string entityId) + public override Task SetAsync(SettingDefinition setting, string value, string providerKey) { - return SettingStore.SetAsync(setting.Name, value, EntityType, entityId); + return SettingStore.SetAsync(setting.Name, value, Name, providerKey); } - public override Task ClearAsync(SettingDefinition setting, string entityId) + public override Task ClearAsync(SettingDefinition setting, string providerKey) { - return SettingStore.DeleteAsync(setting.Name, EntityType, entityId); + return SettingStore.DeleteAsync(setting.Name, Name, providerKey); } } } \ No newline at end of file diff --git a/src/Volo.Abp.Session/Volo/Abp/Settings/UserSettingManagerExtensions.cs b/src/Volo.Abp.Session/Volo/Abp/Settings/UserSettingManagerExtensions.cs index 569bde8395..9387c5c607 100644 --- a/src/Volo.Abp.Session/Volo/Abp/Settings/UserSettingManagerExtensions.cs +++ b/src/Volo.Abp.Session/Volo/Abp/Settings/UserSettingManagerExtensions.cs @@ -10,32 +10,32 @@ namespace Volo.Abp.Settings { public static Task GetOrNullForUserAsync(this ISettingManager settingManager, [NotNull] string name, Guid userId, bool fallback = true) { - return settingManager.GetOrNullAsync(name, UserSettingValueProvider.DefaultEntityType, userId.ToString(), fallback); + return settingManager.GetOrNullAsync(name, UserSettingValueProvider.ProviderName, userId.ToString(), fallback); } public static Task GetOrNullForCurrentUserAsync(this ISettingManager settingManager, [NotNull] string name, bool fallback = true) { - return settingManager.GetOrNullAsync(name, UserSettingValueProvider.DefaultEntityType, null, fallback); + return settingManager.GetOrNullAsync(name, UserSettingValueProvider.ProviderName, null, fallback); } public static Task> GetAllForUserAsync(this ISettingManager settingManager, Guid userId, bool fallback = true) { - return settingManager.GetAllAsync(UserSettingValueProvider.DefaultEntityType, userId.ToString(), fallback); + return settingManager.GetAllAsync(UserSettingValueProvider.ProviderName, userId.ToString(), fallback); } public static Task> GetAllForCurrentUserAsync(this ISettingManager settingManager, bool fallback = true) { - return settingManager.GetAllAsync(UserSettingValueProvider.DefaultEntityType, null, fallback); + return settingManager.GetAllAsync(UserSettingValueProvider.ProviderName, null, fallback); } public static Task SetForUserAsync(this ISettingManager settingManager, Guid userId, [NotNull] string name, [CanBeNull] string value, bool forceToSet = false) { - return settingManager.SetAsync(name, value, UserSettingValueProvider.DefaultEntityType, userId.ToString(), forceToSet); + return settingManager.SetAsync(name, value, UserSettingValueProvider.ProviderName, userId.ToString(), forceToSet); } public static Task SetForCurrentUserAsync(this ISettingManager settingManager, [NotNull] string name, [CanBeNull] string value, bool forceToSet = false) { - return settingManager.SetAsync(name, value, UserSettingValueProvider.DefaultEntityType, null, forceToSet); + return settingManager.SetAsync(name, value, UserSettingValueProvider.ProviderName, null, forceToSet); } } } diff --git a/src/Volo.Abp.Settings.Domain.Shared/Volo.Abp.Settings.Domain.Shared.csproj b/src/Volo.Abp.Settings.Domain.Shared/Volo.Abp.Settings.Domain.Shared.csproj new file mode 100644 index 0000000000..1ae08840a7 --- /dev/null +++ b/src/Volo.Abp.Settings.Domain.Shared/Volo.Abp.Settings.Domain.Shared.csproj @@ -0,0 +1,20 @@ + + + + + + netstandard2.0 + Volo.Abp.Settings.Domain.Shared + Volo.Abp.Settings.Domain.Shared + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + diff --git a/src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/AbpSettingsDomainSharedModule.cs b/src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/AbpSettingsDomainSharedModule.cs new file mode 100644 index 0000000000..fdf5f9e41c --- /dev/null +++ b/src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/AbpSettingsDomainSharedModule.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Settings +{ + public class AbpSettingsDomainSharedModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + } + } +} diff --git a/src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/SettingsConsts.cs b/src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/SettingsConsts.cs new file mode 100644 index 0000000000..0b25a74bf8 --- /dev/null +++ b/src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/SettingsConsts.cs @@ -0,0 +1,10 @@ +namespace Volo.Abp.Settings +{ + public static class SettingsConsts + { + public const int MaxNameLength = 128; + public const int MaxValueLength = 2048; + public const int MaxProviderNameLength = 64; + public const int MaxProviderKeyLength = 64; + } +} diff --git a/src/Volo.Abp.Settings.Domain/Volo.Abp.Settings.Domain.csproj b/src/Volo.Abp.Settings.Domain/Volo.Abp.Settings.Domain.csproj index 425916670d..b980a78f55 100644 --- a/src/Volo.Abp.Settings.Domain/Volo.Abp.Settings.Domain.csproj +++ b/src/Volo.Abp.Settings.Domain/Volo.Abp.Settings.Domain.csproj @@ -15,6 +15,7 @@ + diff --git a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsConsts.cs b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsConsts.cs new file mode 100644 index 0000000000..f3a9f4653c --- /dev/null +++ b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.Settings +{ + public static class AbpSettingsConsts + { + public const string DefaultDbTablePrefix = "Abp"; + + public const string DefaultDbSchema = null; + } +} diff --git a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsDomainModule.cs b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsDomainModule.cs index a6edc3f87a..7bbb6659b8 100644 --- a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsDomainModule.cs +++ b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsDomainModule.cs @@ -5,6 +5,7 @@ namespace Volo.Abp.Settings { [DependsOn(typeof(AbpSettingsModule))] [DependsOn(typeof(AbpDddModule))] + [DependsOn(typeof(AbpSettingsDomainSharedModule))] public class AbpSettingsDomainModule : AbpModule { public override void ConfigureServices(IServiceCollection services) diff --git a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/ISettingRepository.cs b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/ISettingRepository.cs index 7c7164204a..5084e51ec5 100644 --- a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/ISettingRepository.cs +++ b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/ISettingRepository.cs @@ -7,8 +7,8 @@ namespace Volo.Abp.Settings { public interface ISettingRepository : IBasicRepository { - Task FindAsync(string name, string entityType, string entityId); + Task FindAsync(string name, string providerName, string providerKey); - Task> GetListAsync(string entityType, string entityId); + Task> GetListAsync(string providerName, string providerKey); } } \ No newline at end of file diff --git a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/Setting.cs b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/Setting.cs index c2a8318fc6..9a04000f50 100644 --- a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/Setting.cs +++ b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/Setting.cs @@ -13,10 +13,10 @@ namespace Volo.Abp.Settings public virtual string Value { get; internal set; } [CanBeNull] - public virtual string EntityType { get; protected set; } + public virtual string ProviderName { get; protected set; } [CanBeNull] - public virtual string EntityId { get; protected set; } + public virtual string ProviderKey { get; protected set; } protected Setting() { @@ -27,8 +27,8 @@ namespace Volo.Abp.Settings Guid id, [NotNull] string name, [NotNull] string value, - [CanBeNull] string entityType = null, - [CanBeNull] string entityId = null) + [CanBeNull] string providerName = null, + [CanBeNull] string providerKey = null) { Check.NotNull(name, nameof(name)); Check.NotNull(value, nameof(value)); @@ -36,8 +36,8 @@ namespace Volo.Abp.Settings Id = id; Name = name; Value = value; - EntityType = entityType; - EntityId = entityId; + ProviderName = providerName; + ProviderKey = providerKey; } } } \ No newline at end of file diff --git a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs index 231e097775..a1bb9b3c3d 100644 --- a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs +++ b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs @@ -14,18 +14,18 @@ namespace Volo.Abp.Settings _settingRepository = settingRepository; } - public async Task GetOrNullAsync(string name, string entityType, string entityId) + public async Task GetOrNullAsync(string name, string providerName, string providerKey) { - var setting = await _settingRepository.FindAsync(name, entityType, entityId); + var setting = await _settingRepository.FindAsync(name, providerName, providerKey); return setting?.Value; } - public async Task SetAsync(string name, string value, string entityType, string entityId) + public async Task SetAsync(string name, string value, string providerName, string providerKey) { - var setting = await _settingRepository.FindAsync(name, entityType, entityId); + var setting = await _settingRepository.FindAsync(name, providerName, providerKey); if (setting == null) { - setting = new Setting(GuidGenerator.Create(), name, value, entityType, entityId); + setting = new Setting(GuidGenerator.Create(), name, value, providerName, providerKey); await _settingRepository.InsertAsync(setting); } @@ -33,15 +33,15 @@ namespace Volo.Abp.Settings await _settingRepository.UpdateAsync(setting); } - public async Task> GetListAsync(string entityType, string entityId) + public async Task> GetListAsync(string providerName, string providerKey) { - var setting = await _settingRepository.GetListAsync(entityType, entityId); + var setting = await _settingRepository.GetListAsync(providerName, providerKey); return setting.Select(s => new SettingValue(s.Name, s.Value)).ToList(); } - public async Task DeleteAsync(string name, string entityType, string entityId) + public async Task DeleteAsync(string name, string providerName, string providerKey) { - var setting = await _settingRepository.FindAsync(name, entityType, entityId); + var setting = await _settingRepository.FindAsync(name, providerName, providerKey); if (setting != null) { await _settingRepository.DeleteAsync(setting); diff --git a/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContext.cs b/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContext.cs index cc6ed9ce6f..0ce713d764 100644 --- a/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContext.cs +++ b/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContext.cs @@ -7,6 +7,10 @@ namespace Volo.Abp.Settings.EntityFrameworkCore [ConnectionStringName("AbpSettings")] public class AbpSettingsDbContext : AbpDbContext, IAbpSettingsDbContext { + public static string TablePrefix { get; set; } = AbpSettingsConsts.DefaultDbTablePrefix; + + public static string Schema { get; set; } = AbpSettingsConsts.DefaultDbSchema; + public DbSet Settings { get; set; } public AbpSettingsDbContext(DbContextOptions options) @@ -14,5 +18,11 @@ namespace Volo.Abp.Settings.EntityFrameworkCore { } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + builder.ConfigureAbpSettings(TablePrefix, Schema); + } } } diff --git a/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContextModelBuilderExtensions.cs b/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContextModelBuilderExtensions.cs new file mode 100644 index 0000000000..15b91d3cf7 --- /dev/null +++ b/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContextModelBuilderExtensions.cs @@ -0,0 +1,33 @@ +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace Volo.Abp.Settings.EntityFrameworkCore +{ + public static class AbpSettingsDbContextModelBuilderExtensions + { + public static void ConfigureAbpSettings( + [NotNull] this ModelBuilder builder, + [CanBeNull] string tablePrefix = AbpSettingsConsts.DefaultDbTablePrefix, + [CanBeNull] string schema = AbpSettingsConsts.DefaultDbSchema) + { + Check.NotNull(builder, nameof(builder)); + + if (tablePrefix == null) + { + tablePrefix = ""; + } + + builder.Entity(b => + { + b.ToTable(tablePrefix + "Settings", schema); + + b.Property(x => x.Name).HasMaxLength(SettingsConsts.MaxNameLength).IsRequired(); + b.Property(x => x.Value).HasMaxLength(SettingsConsts.MaxValueLength).IsRequired(); + b.Property(x => x.ProviderName).HasMaxLength(SettingsConsts.MaxProviderNameLength); + b.Property(x => x.ProviderKey).HasMaxLength(SettingsConsts.MaxProviderKeyLength); + + b.HasIndex(x => new {x.Name, x.ProviderName, x.ProviderKey}); + }); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/EfCoreSettingRepository.cs b/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/EfCoreSettingRepository.cs index 2073f36269..3f31147390 100644 --- a/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/EfCoreSettingRepository.cs +++ b/src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/EfCoreSettingRepository.cs @@ -15,14 +15,14 @@ namespace Volo.Abp.Settings.EntityFrameworkCore { } - public async Task FindAsync(string name, string entityType, string entityId) + public async Task FindAsync(string name, string providerName, string providerKey) { - return await DbSet.FirstOrDefaultAsync(s => s.Name == name && s.EntityType == entityType && s.EntityId == entityId); + return await DbSet.FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); } - public async Task> GetListAsync(string entityType, string entityId) + public async Task> GetListAsync(string providerName, string providerKey) { - return await DbSet.Where(s => s.EntityType == entityType && s.EntityId == entityId).ToListAsync(); + return await DbSet.Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync(); } } } diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs index f6d6df3b91..0d236a4336 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs @@ -4,7 +4,9 @@ namespace Volo.Abp.Settings { public class DefaultValueSettingValueProvider : SettingValueProvider { - public override string EntityType => null; + public const string ProviderName = null; + + public override string Name => ProviderName; public DefaultValueSettingValueProvider(ISettingStore settingStore) : base(settingStore) @@ -12,18 +14,18 @@ namespace Volo.Abp.Settings } - public override Task GetOrNullAsync(SettingDefinition setting, string entityId) + public override Task GetOrNullAsync(SettingDefinition setting, string providerKey) { return Task.FromResult(setting.DefaultValue); } - public override Task SetAsync(SettingDefinition setting, string value, string entityId) + public override Task SetAsync(SettingDefinition setting, string value, string providerKey) { setting.DefaultValue = value; return Task.CompletedTask; } - public override Task ClearAsync(SettingDefinition setting, string entityId) + public override Task ClearAsync(SettingDefinition setting, string providerKey) { setting.DefaultValue = null; return Task.CompletedTask; diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs index ce22151a38..d5dabccfe8 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs @@ -8,17 +8,17 @@ namespace Volo.Abp.Settings { public static Task GetOrNullGlobalAsync(this ISettingManager settingManager, [NotNull] string name, bool fallback = true) { - return settingManager.GetOrNullAsync(name, GlobalSettingValueProvider.DefaultEntityType, null, fallback); + return settingManager.GetOrNullAsync(name, GlobalSettingValueProvider.ProviderName, null, fallback); } public static Task> GetAllGlobalAsync(this ISettingManager settingManager, bool fallback = true) { - return settingManager.GetAllAsync(GlobalSettingValueProvider.DefaultEntityType, null, fallback); + return settingManager.GetAllAsync(GlobalSettingValueProvider.ProviderName, null, fallback); } public static Task SetGlobalAsync(this ISettingManager settingManager, [NotNull] string name, [CanBeNull] string value) { - return settingManager.SetAsync(name, value, GlobalSettingValueProvider.DefaultEntityType, null); + return settingManager.SetAsync(name, value, GlobalSettingValueProvider.ProviderName, null); } } } diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs index c5c628cffd..78a38cc703 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs @@ -4,28 +4,28 @@ namespace Volo.Abp.Settings { public class GlobalSettingValueProvider : SettingValueProvider { - public const string DefaultEntityType = "Global"; + public const string ProviderName = "Global"; - public override string EntityType => DefaultEntityType; + public override string Name => ProviderName; public GlobalSettingValueProvider(ISettingStore settingStore) : base(settingStore) { } - public override Task GetOrNullAsync(SettingDefinition setting, string entityId) + public override Task GetOrNullAsync(SettingDefinition setting, string providerKey) { - return SettingStore.GetOrNullAsync(setting.Name, EntityType, null); + return SettingStore.GetOrNullAsync(setting.Name, Name, null); } - public override Task SetAsync(SettingDefinition setting, string value, string entityId) + public override Task SetAsync(SettingDefinition setting, string value, string providerKey) { - return SettingStore.SetAsync(setting.Name, value, EntityType, null); + return SettingStore.SetAsync(setting.Name, value, Name, null); } - public override Task ClearAsync(SettingDefinition setting, string entityId) + public override Task ClearAsync(SettingDefinition setting, string providerKey) { - return SettingStore.DeleteAsync(setting.Name, EntityType, null); + return SettingStore.DeleteAsync(setting.Name, Name, null); } } } \ No newline at end of file diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs index 4d60e5a61c..9c794a2c9b 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs @@ -8,12 +8,12 @@ namespace Volo.Abp.Settings { Task GetOrNullAsync([NotNull]string name); - Task GetOrNullAsync([NotNull]string name, [NotNull] string entityType, [CanBeNull] string entityId, bool fallback = true); + Task GetOrNullAsync([NotNull]string name, [NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); Task> GetAllAsync(); - Task> GetAllAsync([NotNull] string entityType, [CanBeNull] string entityId, bool fallback = true); + Task> GetAllAsync([NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); - Task SetAsync([NotNull] string name, [CanBeNull] string value, [NotNull] string entityType, [CanBeNull] string entityId, bool forceToSet = false); + Task SetAsync([NotNull] string name, [CanBeNull] string value, [NotNull] string providerName, [CanBeNull] string providerKey, bool forceToSet = false); } } \ No newline at end of file diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs index 523da0c38c..40ee68f462 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs @@ -6,12 +6,12 @@ namespace Volo.Abp.Settings { public interface ISettingStore { - Task GetOrNullAsync([NotNull] string name, [CanBeNull] string entityType, [CanBeNull] string entityId); + Task GetOrNullAsync([NotNull] string name, [CanBeNull] string providerName, [CanBeNull] string providerKey); - Task SetAsync([NotNull] string name, [NotNull] string value, [CanBeNull] string entityType, [CanBeNull] string entityId); + Task SetAsync([NotNull] string name, [NotNull] string value, [CanBeNull] string providerName, [CanBeNull] string providerKey); - Task> GetListAsync([CanBeNull] string entityType, [CanBeNull] string entityId); + Task> GetListAsync([CanBeNull] string providerName, [CanBeNull] string providerKey); - Task DeleteAsync([NotNull] string name, [CanBeNull]string entityType, [CanBeNull]string entityId); + Task DeleteAsync([NotNull] string name, [CanBeNull]string providerName, [CanBeNull]string providerKey); } } diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs index 9065b4bba7..830546b23d 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs @@ -5,12 +5,12 @@ namespace Volo.Abp.Settings { public interface ISettingValueProvider { - string EntityType { get; } + string Name { get; } - Task GetOrNullAsync([NotNull] SettingDefinition setting, [CanBeNull] string entityId); + Task GetOrNullAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); - Task SetAsync([NotNull] SettingDefinition setting, [NotNull] string value, [CanBeNull] string entityId); + Task SetAsync([NotNull] SettingDefinition setting, [NotNull] string value, [CanBeNull] string providerKey); - Task ClearAsync([NotNull] SettingDefinition setting, [CanBeNull] string entityId); + Task ClearAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); } } \ No newline at end of file diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs index 898e2d9f51..ade721431d 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs @@ -6,22 +6,22 @@ namespace Volo.Abp.Settings { public class NullSettingStore : ISettingStore, ISingletonDependency { - public Task GetOrNullAsync(string name, string entityType, string entityId) + public Task GetOrNullAsync(string name, string providerName, string providerKey) { return Task.FromResult((string) null); } - public Task SetAsync(string name, string value, string entityType, string entityId) + public Task SetAsync(string name, string value, string providerName, string providerKey) { return Task.CompletedTask; } - public Task> GetListAsync(string entityType, string entityId) + public Task> GetListAsync(string providerName, string providerKey) { return Task.FromResult(new List()); } - public Task DeleteAsync(string name, string entityType, string entityId) + public Task DeleteAsync(string name, string providerName, string providerKey) { return Task.CompletedTask; } diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs index 23fff238fc..fb3f6cca0f 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs @@ -44,33 +44,33 @@ namespace Volo.Abp.Settings return GetOrNullInternalAsync(name, null, null); } - public virtual Task GetOrNullAsync(string name, string entityType, string entityId, bool fallback = true) + public virtual Task GetOrNullAsync(string name, string providerName, string providerKey, bool fallback = true) { Check.NotNull(name, nameof(name)); - Check.NotNull(entityType, nameof(entityType)); + Check.NotNull(providerName, nameof(providerName)); - return GetOrNullInternalAsync(name, entityType, entityId, fallback); + return GetOrNullInternalAsync(name, providerName, providerKey, fallback); } - public virtual async Task GetOrNullInternalAsync(string name, string entityType, string entityId, bool fallback = true) + public virtual async Task GetOrNullInternalAsync(string name, string providerName, string providerKey, bool fallback = true) { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(Providers.Value); - if (entityType != null) + if (providerName != null) { - providers = providers.SkipWhile(c => c.EntityType != entityType); + providers = providers.SkipWhile(c => c.Name != providerName); } if (!fallback || !setting.IsInherited) { - providers = providers.TakeWhile(c => c.EntityType == entityType); + providers = providers.TakeWhile(c => c.Name == providerName); } foreach (var provider in providers) { - var value = await provider.GetOrNullAsync(setting, entityId); + var value = await provider.GetOrNullAsync(setting, providerKey); if (value != null) { return value; @@ -100,18 +100,18 @@ namespace Volo.Abp.Settings return settingValues.Values.ToList(); } - public virtual async Task> GetAllAsync(string entityType, string entityId, bool fallback = true) + public virtual async Task> GetAllAsync(string providerName, string providerKey, bool fallback = true) { - Check.NotNull(entityType, nameof(entityType)); + Check.NotNull(providerName, nameof(providerName)); var settingValues = new Dictionary(); var settingDefinitions = SettingDefinitionManager.GetAll(); var providers = Enumerable.Reverse(Providers.Value) - .SkipWhile(c => c.EntityType != entityType); + .SkipWhile(c => c.Name != providerName); if (!fallback) { - providers = providers.TakeWhile(c => c.EntityType == entityType); + providers = providers.TakeWhile(c => c.Name == providerName); } var providerList = providers.Reverse().ToList(); @@ -124,7 +124,7 @@ namespace Volo.Abp.Settings { foreach (var provider in providerList) { - var value = await provider.GetOrNullAsync(setting, entityId); + var value = await provider.GetOrNullAsync(setting, providerKey); if (value != null) { settingValues[setting.Name] = new SettingValue(setting.Name, value); @@ -135,7 +135,7 @@ namespace Volo.Abp.Settings { settingValues[setting.Name] = new SettingValue( setting.Name, - await providerList[0].GetOrNullAsync(setting, entityId) + await providerList[0].GetOrNullAsync(setting, providerKey) ); } } @@ -144,16 +144,16 @@ namespace Volo.Abp.Settings return settingValues.Values.ToList(); } - public virtual async Task SetAsync(string name, string value, string entityType, string entityId, bool forceToSet = false) + public virtual async Task SetAsync(string name, string value, string providerName, string providerKey, bool forceToSet = false) { Check.NotNull(name, nameof(name)); - Check.NotNull(entityType, nameof(entityType)); + Check.NotNull(providerName, nameof(providerName)); var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(Providers.Value) - .SkipWhile(p => p.EntityType != entityType) + .SkipWhile(p => p.Name != providerName) .ToList(); if (!providers.Any()) @@ -164,7 +164,7 @@ namespace Volo.Abp.Settings if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null) { //Clear the value if it's same as it's fallback value - var fallbackValue = await GetOrNullInternalAsync(name, providers[1].EntityType, entityId); + var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, providerKey); if (fallbackValue == value) { value = null; @@ -172,21 +172,21 @@ namespace Volo.Abp.Settings } providers = providers - .TakeWhile(p => p.EntityType == entityType) + .TakeWhile(p => p.Name == providerName) .ToList(); //Getting list for case of there are more than one provider with same EntityType if (value == null) { foreach (var provider in providers) { - await provider.ClearAsync(setting, entityId); + await provider.ClearAsync(setting, providerKey); } } else { foreach (var provider in providers) { - await provider.SetAsync(setting, value, entityId); + await provider.SetAsync(setting, value, providerKey); } } } diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs index 5af5b45471..dcd98945e4 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs @@ -5,7 +5,7 @@ namespace Volo.Abp.Settings { public abstract class SettingValueProvider : ISettingValueProvider, ISingletonDependency { - public abstract string EntityType { get; } + public abstract string Name { get; } protected ISettingStore SettingStore { get; } @@ -14,10 +14,10 @@ namespace Volo.Abp.Settings SettingStore = settingStore; } - public abstract Task GetOrNullAsync(SettingDefinition setting, string entityId); + public abstract Task GetOrNullAsync(SettingDefinition setting, string providerKey); - public abstract Task SetAsync(SettingDefinition setting, string value, string entityId); + public abstract Task SetAsync(SettingDefinition setting, string value, string providerKey); - public abstract Task ClearAsync(SettingDefinition setting, string entityId); + public abstract Task ClearAsync(SettingDefinition setting, string providerKey); } } \ No newline at end of file diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestBase.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestBase.cs index 5077ad8e3c..d30568aca4 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestBase.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestBase.cs @@ -35,8 +35,8 @@ namespace Volo.Abp.Settings return UsingDbContext(context => context.Settings.Where( s => - s.EntityType == UserSettingValueProvider.DefaultEntityType && - s.EntityId == AbpIdentityTestDataBuilder.User1Id.ToString() && + s.ProviderName == UserSettingValueProvider.ProviderName && + s.ProviderKey == AbpIdentityTestDataBuilder.User1Id.ToString() && s.Name == "MySetting2" ).ToList() ); diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs index 5405edf567..73488df1b4 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs @@ -21,14 +21,14 @@ namespace Volo.Abp.Settings public void Build() { - _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting1", "42", GlobalSettingValueProvider.DefaultEntityType)); + _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting1", "42", GlobalSettingValueProvider.ProviderName)); - _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "default-store-value", GlobalSettingValueProvider.DefaultEntityType)); - _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "user1-store-value", UserSettingValueProvider.DefaultEntityType, User1Id.ToString())); - _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "user2-store-value", UserSettingValueProvider.DefaultEntityType, User2Id.ToString())); + _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "default-store-value", GlobalSettingValueProvider.ProviderName)); + _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "user1-store-value", UserSettingValueProvider.ProviderName, User1Id.ToString())); + _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "user2-store-value", UserSettingValueProvider.ProviderName, User2Id.ToString())); - _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySettingWithoutInherit", "default-store-value", GlobalSettingValueProvider.DefaultEntityType)); - _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySettingWithoutInherit", "user1-store-value", UserSettingValueProvider.DefaultEntityType, User1Id.ToString())); + _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySettingWithoutInherit", "default-store-value", GlobalSettingValueProvider.ProviderName)); + _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySettingWithoutInherit", "user1-store-value", UserSettingValueProvider.ProviderName, User1Id.ToString())); } } } \ No newline at end of file diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs index 621c31f0a9..767a10bd94 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs @@ -111,7 +111,7 @@ namespace Volo.Abp.Settings await _settingManager.SetForUserAsync(AbpIdentityTestDataBuilder.User1Id, "MySetting2", null); GetSettingsFromDbContext( - UserSettingValueProvider.DefaultEntityType, + UserSettingValueProvider.ProviderName, AbpIdentityTestDataBuilder.User1Id.ToString(), "MySetting2" ).Count.ShouldBe(0); @@ -129,7 +129,7 @@ namespace Volo.Abp.Settings .ShouldBe("user1-new-store-value"); GetSettingsFromDbContext( - UserSettingValueProvider.DefaultEntityType, + UserSettingValueProvider.ProviderName, AbpIdentityTestDataBuilder.User1Id.ToString(), "MySetting2" ).Single().Value.ShouldBe("user1-new-store-value"); @@ -145,7 +145,7 @@ namespace Volo.Abp.Settings ); GetSettingsFromDbContext( - UserSettingValueProvider.DefaultEntityType, + UserSettingValueProvider.ProviderName, AbpIdentityTestDataBuilder.User1Id.ToString(), "MySetting2" ).Count.ShouldBe(0); @@ -165,7 +165,7 @@ namespace Volo.Abp.Settings ); GetSettingsFromDbContext( - UserSettingValueProvider.DefaultEntityType, + UserSettingValueProvider.ProviderName, AbpIdentityTestDataBuilder.User1Id.ToString(), "MySetting2" ).Single().Value.ShouldBe("default-store-value");