Browse Source

Enhancements on settings.

pull/204/head
Halil İbrahim Kalkan 8 years ago
parent
commit
008f42f08f
  1. 7
      Volo.Abp.sln
  2. 6
      src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs
  3. 20
      src/Volo.Abp.Session/Volo/Abp/Session/UserSettingValueProvider.cs
  4. 12
      src/Volo.Abp.Session/Volo/Abp/Settings/UserSettingManagerExtensions.cs
  5. 20
      src/Volo.Abp.Settings.Domain.Shared/Volo.Abp.Settings.Domain.Shared.csproj
  6. 13
      src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/AbpSettingsDomainSharedModule.cs
  7. 10
      src/Volo.Abp.Settings.Domain.Shared/Volo/Abp/Settings/SettingsConsts.cs
  8. 1
      src/Volo.Abp.Settings.Domain/Volo.Abp.Settings.Domain.csproj
  9. 9
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsConsts.cs
  10. 1
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsDomainModule.cs
  11. 4
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/ISettingRepository.cs
  12. 12
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/Setting.cs
  13. 18
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs
  14. 10
      src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContext.cs
  15. 33
      src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContextModelBuilderExtensions.cs
  16. 8
      src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/EfCoreSettingRepository.cs
  17. 10
      src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs
  18. 6
      src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs
  19. 16
      src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs
  20. 6
      src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs
  21. 8
      src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs
  22. 8
      src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs
  23. 8
      src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs
  24. 42
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs
  25. 8
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs
  26. 4
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestBase.cs
  27. 12
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs
  28. 8
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs

7
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}

6
src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs

@ -59,12 +59,6 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
}
/// <summary>
/// Configures the schema needed for the identity framework.
/// </summary>
/// <param name="builder">
/// The builder being used to construct the model for this context.
/// </param>
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

20
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<string> GetOrNullAsync(SettingDefinition setting, string entityId)
public override async Task<string> 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);
}
}
}

12
src/Volo.Abp.Session/Volo/Abp/Settings/UserSettingManagerExtensions.cs

@ -10,32 +10,32 @@ namespace Volo.Abp.Settings
{
public static Task<string> 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<string> 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<List<SettingValue>> 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<List<SettingValue>> 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);
}
}
}

20
src/Volo.Abp.Settings.Domain.Shared/Volo.Abp.Settings.Domain.Shared.csproj

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>Volo.Abp.Settings.Domain.Shared</AssemblyName>
<PackageId>Volo.Abp.Settings.Domain.Shared</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Core\Volo.Abp.Core.csproj" />
</ItemGroup>
</Project>

13
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<AbpSettingsDomainSharedModule>();
}
}
}

10
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;
}
}

1
src/Volo.Abp.Settings.Domain/Volo.Abp.Settings.Domain.csproj

@ -15,6 +15,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Ddd\Volo.Abp.Ddd.csproj" />
<ProjectReference Include="..\Volo.Abp.Settings.Domain.Shared\Volo.Abp.Settings.Domain.Shared.csproj" />
<ProjectReference Include="..\Volo.Abp.Settings\Volo.Abp.Settings.csproj" />
</ItemGroup>

9
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;
}
}

1
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)

4
src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/ISettingRepository.cs

@ -7,8 +7,8 @@ namespace Volo.Abp.Settings
{
public interface ISettingRepository : IBasicRepository<Setting, Guid>
{
Task<Setting> FindAsync(string name, string entityType, string entityId);
Task<Setting> FindAsync(string name, string providerName, string providerKey);
Task<List<Setting>> GetListAsync(string entityType, string entityId);
Task<List<Setting>> GetListAsync(string providerName, string providerKey);
}
}

12
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;
}
}
}

18
src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs

@ -14,18 +14,18 @@ namespace Volo.Abp.Settings
_settingRepository = settingRepository;
}
public async Task<string> GetOrNullAsync(string name, string entityType, string entityId)
public async Task<string> 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<List<SettingValue>> GetListAsync(string entityType, string entityId)
public async Task<List<SettingValue>> 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);

10
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<AbpSettingsDbContext>, IAbpSettingsDbContext
{
public static string TablePrefix { get; set; } = AbpSettingsConsts.DefaultDbTablePrefix;
public static string Schema { get; set; } = AbpSettingsConsts.DefaultDbSchema;
public DbSet<Setting> Settings { get; set; }
public AbpSettingsDbContext(DbContextOptions<AbpSettingsDbContext> options)
@ -14,5 +18,11 @@ namespace Volo.Abp.Settings.EntityFrameworkCore
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigureAbpSettings(TablePrefix, Schema);
}
}
}

33
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<Setting>(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});
});
}
}
}

8
src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/EfCoreSettingRepository.cs

@ -15,14 +15,14 @@ namespace Volo.Abp.Settings.EntityFrameworkCore
{
}
public async Task<Setting> FindAsync(string name, string entityType, string entityId)
public async Task<Setting> 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<List<Setting>> GetListAsync(string entityType, string entityId)
public async Task<List<Setting>> 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();
}
}
}

10
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<string> GetOrNullAsync(SettingDefinition setting, string entityId)
public override Task<string> 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;

6
src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs

@ -8,17 +8,17 @@ namespace Volo.Abp.Settings
{
public static Task<string> 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<List<SettingValue>> 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);
}
}
}

16
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<string> GetOrNullAsync(SettingDefinition setting, string entityId)
public override Task<string> 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);
}
}
}

6
src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs

@ -8,12 +8,12 @@ namespace Volo.Abp.Settings
{
Task<string> GetOrNullAsync([NotNull]string name);
Task<string> GetOrNullAsync([NotNull]string name, [NotNull] string entityType, [CanBeNull] string entityId, bool fallback = true);
Task<string> GetOrNullAsync([NotNull]string name, [NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true);
Task<List<SettingValue>> GetAllAsync();
Task<List<SettingValue>> GetAllAsync([NotNull] string entityType, [CanBeNull] string entityId, bool fallback = true);
Task<List<SettingValue>> 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);
}
}

8
src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs

@ -6,12 +6,12 @@ namespace Volo.Abp.Settings
{
public interface ISettingStore
{
Task<string> GetOrNullAsync([NotNull] string name, [CanBeNull] string entityType, [CanBeNull] string entityId);
Task<string> 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<List<SettingValue>> GetListAsync([CanBeNull] string entityType, [CanBeNull] string entityId);
Task<List<SettingValue>> 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);
}
}

8
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<string> GetOrNullAsync([NotNull] SettingDefinition setting, [CanBeNull] string entityId);
Task<string> 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);
}
}

8
src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs

@ -6,22 +6,22 @@ namespace Volo.Abp.Settings
{
public class NullSettingStore : ISettingStore, ISingletonDependency
{
public Task<string> GetOrNullAsync(string name, string entityType, string entityId)
public Task<string> 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<List<SettingValue>> GetListAsync(string entityType, string entityId)
public Task<List<SettingValue>> GetListAsync(string providerName, string providerKey)
{
return Task.FromResult(new List<SettingValue>());
}
public Task DeleteAsync(string name, string entityType, string entityId)
public Task DeleteAsync(string name, string providerName, string providerKey)
{
return Task.CompletedTask;
}

42
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<string> GetOrNullAsync(string name, string entityType, string entityId, bool fallback = true)
public virtual Task<string> 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<string> GetOrNullInternalAsync(string name, string entityType, string entityId, bool fallback = true)
public virtual async Task<string> 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<List<SettingValue>> GetAllAsync(string entityType, string entityId, bool fallback = true)
public virtual async Task<List<SettingValue>> GetAllAsync(string providerName, string providerKey, bool fallback = true)
{
Check.NotNull(entityType, nameof(entityType));
Check.NotNull(providerName, nameof(providerName));
var settingValues = new Dictionary<string, SettingValue>();
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);
}
}
}

8
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<string> GetOrNullAsync(SettingDefinition setting, string entityId);
public abstract Task<string> 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);
}
}

4
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()
);

12
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()));
}
}
}

8
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");

Loading…
Cancel
Save