Browse Source

Implemented initial FeatureStore

pull/870/head
Halil ibrahim Kalkan 7 years ago
parent
commit
8ea02e0b93
  1. 1
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj
  2. 4
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs
  3. 27
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureStore.cs
  4. 42
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureValue.cs
  5. 13
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureValueConsts.cs
  6. 14
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureValueRepository.cs

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

@ -9,6 +9,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Ddd.Domain\Volo.Abp.Ddd.Domain.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Features\Volo.Abp.Features.csproj" />
</ItemGroup>
<ItemGroup>

4
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs

@ -1,4 +1,5 @@
using Volo.Abp.FeatureManagement.Localization;
using Volo.Abp.Features;
using Volo.Abp.Localization;
using Volo.Abp.Localization.ExceptionHandling;
using Volo.Abp.Modularity;
@ -7,7 +8,8 @@ using Volo.Abp.VirtualFileSystem;
namespace Volo.Abp.FeatureManagement
{
[DependsOn(
typeof(AbpFeatureManagementDomainSharedModule)
typeof(AbpFeatureManagementDomainSharedModule),
typeof(AbpFeaturesModule)
)]
public class AbpFeatureManagementDomainModule : AbpModule
{

27
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureStore.cs

@ -0,0 +1,27 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Features;
namespace Volo.Abp.FeatureManagement
{
//TODO: Implement caching
public class FeatureStore : IFeatureStore, ITransientDependency
{
protected IFeatureValueRepository FeatureValueRepository { get; }
public FeatureStore(IFeatureValueRepository featureValueRepository)
{
FeatureValueRepository = featureValueRepository;
}
public async Task<string> GetOrNullAsync(
string name,
string providerName,
string providerKey)
{
var featureValue = await FeatureValueRepository.FindAsync(name, providerName, providerKey);
return featureValue?.Value;
}
}
}

42
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureValue.cs

@ -0,0 +1,42 @@
using System;
using JetBrains.Annotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.FeatureManagement
{
public class FeatureValue : Entity<Guid>, IAggregateRoot<Guid>
{
[NotNull]
public virtual string Name { get; protected set; }
[NotNull]
public virtual string Value { get; internal set; }
[NotNull]
public virtual string ProviderName { get; protected set; }
[CanBeNull]
public virtual string ProviderKey { get; protected set; }
protected FeatureValue()
{
}
public FeatureValue(
Guid id,
[NotNull] string name,
[NotNull] string value,
[NotNull] string providerName,
[CanBeNull] string providerKey)
{
Check.NotNull(name, nameof(name));
Id = id;
Name = Check.NotNullOrWhiteSpace(name, nameof(name));
Value = Check.NotNullOrWhiteSpace(value, nameof(value));
ProviderName = Check.NotNullOrWhiteSpace(providerName, nameof(providerName));
ProviderKey = providerKey;
}
}
}

13
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureValueConsts.cs

@ -0,0 +1,13 @@
namespace Volo.Abp.FeatureManagement
{
public static class FeatureValueConsts
{
public const int MaxNameLength = 128;
public const int MaxProviderNameLength = 64;
public const int MaxProviderKeyLength = 64;
public const int MaxValueLength = 128;
}
}

14
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureValueRepository.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.FeatureManagement
{
public interface IFeatureValueRepository : IBasicRepository<FeatureValue, Guid>
{
Task<FeatureValue> FindAsync(string name, string providerName, string providerKey);
Task<List<FeatureValue>> GetListAsync(string providerName, string providerKey);
}
}
Loading…
Cancel
Save