Improved setting system.

pull/204/head
Halil İbrahim Kalkan 8 years ago
parent 387dcae2e2
commit 2e4ef14a77

@ -1,5 +1,4 @@
using System;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Volo.Abp.Settings;
namespace Volo.Abp.Session
@ -34,5 +33,15 @@ namespace Volo.Abp.Session
return await SettingStore.GetOrNullAsync(setting.Name, EntityType, entityId);
}
public override Task SetAsync(SettingDefinition setting, string value, string entityId)
{
return SettingStore.SetAsync(setting.Name, value, EntityType, entityId);
}
public override Task ClearAsync(SettingDefinition setting, string entityId)
{
return SettingStore.DeleteAsync(setting.Name, EntityType, entityId);
}
}
}

@ -38,5 +38,14 @@ namespace Volo.Abp.Settings
var setting = await _settingRepository.GetListAsync(entityType, entityId);
return setting.Select(s => new SettingValue(s.Name, s.Value)).ToList();
}
public async Task DeleteAsync(string name, string entityType, string entityId)
{
var setting = await _settingRepository.FindAsync(name, entityType, entityId);
if (setting != null)
{
await _settingRepository.DeleteAsync(setting);
}
}
}
}

@ -15,5 +15,15 @@ namespace Volo.Abp.Settings
{
return SettingStore.GetOrNullAsync(setting.Name, null, null);
}
public override Task SetAsync(SettingDefinition setting, string value, string entityId)
{
return SettingStore.SetAsync(setting.Name, value, null, null);
}
public override Task ClearAsync(SettingDefinition setting, string entityId)
{
return SettingStore.DeleteAsync(setting.Name, null, null);
}
}
}

@ -16,5 +16,17 @@ namespace Volo.Abp.Settings
{
return Task.FromResult(setting.DefaultValue);
}
public override Task SetAsync(SettingDefinition setting, string value, string entityId)
{
setting.DefaultValue = value;
return Task.CompletedTask;
}
public override Task ClearAsync(SettingDefinition setting, string entityId)
{
setting.DefaultValue = null;
return Task.CompletedTask;
}
}
}

@ -11,5 +11,7 @@ namespace Volo.Abp.Settings
Task SetAsync([NotNull] string name, [NotNull] string value, [CanBeNull] string entityType, [CanBeNull] string entityId);
Task<List<SettingValue>> GetListAsync([CanBeNull] string entityType, [CanBeNull] string entityId);
Task DeleteAsync([NotNull] string name, [CanBeNull]string entityType, [CanBeNull]string entityId);
}
}

@ -8,5 +8,9 @@ namespace Volo.Abp.Settings
string EntityType { get; }
Task<string> GetOrNullAsync([NotNull] SettingDefinition setting, [CanBeNull] string entityId);
Task SetAsync([NotNull] SettingDefinition setting, [NotNull] string value, [CanBeNull] string entityId);
Task ClearAsync([NotNull] SettingDefinition setting, [CanBeNull] string entityId);
}
}

@ -0,0 +1,29 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Settings
{
public class NullSettingStore : ISettingStore, ISingletonDependency
{
public Task<string> GetOrNullAsync(string name, string entityType, string entityId)
{
return Task.FromResult((string) null);
}
public Task SetAsync(string name, string value, string entityType, string entityId)
{
return Task.CompletedTask;
}
public Task<List<SettingValue>> GetListAsync(string entityType, string entityId)
{
return Task.FromResult(new List<SettingValue>());
}
public Task DeleteAsync(string name, string entityType, string entityId)
{
return Task.CompletedTask;
}
}
}

@ -38,34 +38,31 @@ namespace Volo.Abp.Settings
);
}
public virtual async Task<string> GetOrNullAsync(string name)
public virtual Task<string> GetOrNullAsync(string name)
{
Check.NotNull(name, nameof(name));
var setting = SettingDefinitionManager.Get(name);
var contributors = Enumerable.Reverse(Providers.Value);
foreach (var contributor in contributors)
{
var value = await contributor.GetOrNullAsync(setting, null);
if (value != null)
{
return value;
}
}
return null;
return GetOrNullInternalAsync(name, null, null);
}
public virtual async Task<string> GetOrNullAsync(string name, string entityType, string entityId, bool fallback = true)
public virtual Task<string> GetOrNullAsync(string name, string entityType, string entityId, bool fallback = true)
{
Check.NotNull(name, nameof(name));
Check.NotNull(entityType, nameof(entityType));
return GetOrNullInternalAsync(name, entityType, entityId, fallback);
}
public virtual async Task<string> GetOrNullInternalAsync(string name, string entityType, string entityId, bool fallback = true)
{
var setting = SettingDefinitionManager.Get(name);
var providers = Enumerable
.Reverse(Providers.Value)
.SkipWhile(c => c.EntityType != entityType);
.Reverse(Providers.Value);
if (entityType != null)
{
providers = providers.SkipWhile(c => c.EntityType != entityType);
}
if (!fallback)
{
@ -137,12 +134,56 @@ namespace Volo.Abp.Settings
public virtual Task SetAsync(string name, string value, bool forceToSet = false)
{
throw new System.NotImplementedException();
Check.NotNull(name, nameof(name));
return SetInternalAsync(name, value, null, null, forceToSet);
}
public virtual Task SetAsync(string name, string value, string entityType, string entityId, bool forceToSet = false)
{
throw new System.NotImplementedException();
Check.NotNull(name, nameof(name));
Check.NotNull(entityType, nameof(entityType));
return SetInternalAsync(name, value, entityType, entityId, forceToSet);
}
protected virtual async Task SetInternalAsync(string name, string value, string entityType, string entityId, bool forceToSet = false)
{
var setting = SettingDefinitionManager.Get(name);
if (!forceToSet)
{
var currentValue = await GetOrNullInternalAsync(name, entityType, entityId);
if (currentValue == value)
{
return;
}
}
var providers = Enumerable
.Reverse(Providers.Value)
.SkipWhile(p => p.EntityType != entityType)
.ToList();
if (!providers.Any())
{
return;
}
if (value == null)
{
foreach (var provider in providers)
{
await provider.ClearAsync(setting, entityId);
}
}
else
{
foreach (var provider in providers)
{
await provider.SetAsync(setting, value, entityId);
}
}
}
}
}

@ -15,5 +15,9 @@ namespace Volo.Abp.Settings
}
public abstract Task<string> GetOrNullAsync(SettingDefinition setting, string entityId);
public abstract Task SetAsync(SettingDefinition setting, string value, string entityId);
public abstract Task ClearAsync(SettingDefinition setting, string entityId);
}
}

@ -4,11 +4,11 @@ using Xunit;
namespace Volo.Abp.Settings
{
public class SettingManager_Tests : AbpSettingsTestBase
public class SettingManager_Basic_Tests : AbpSettingsTestBase
{
private readonly ISettingManager _settingManager;
public SettingManager_Tests()
public SettingManager_Basic_Tests()
{
_settingManager = GetRequiredService<ISettingManager>();
}
@ -42,5 +42,14 @@ namespace Volo.Abp.Settings
settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "default-store-value");
settingValues.ShouldContain(sv => sv.Name == "SettingNotSetInStore" && sv.Value == "default-value");
}
[Fact]
public async Task Should_Set_Value()
{
await _settingManager.SetAsync("MySetting1", "43");
(await _settingManager.GetOrNullAsync("MySetting1")).ShouldBe("43");
//TODO: Also check database!
}
}
}

@ -8,13 +8,13 @@ using Xunit;
namespace Volo.Abp.Settings
{
public class SettingManager_User_GetValue_Tests: AbpSettingsTestBase
public class SettingManager_User_Tests: AbpSettingsTestBase
{
private Guid _currentUserId;
private readonly ISettingManager _settingManager;
public SettingManager_User_GetValue_Tests()
public SettingManager_User_Tests()
{
_settingManager = GetRequiredService<ISettingManager>();
}
Loading…
Cancel
Save