CmsKit - Initial of Tag Definitions

pull/7103/head
enisn 5 years ago
parent 437085f962
commit f2ee973860

@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.CmsKit.Tags;
@ -6,5 +8,6 @@ namespace Volo.CmsKit.Admin.Tags
{
public interface ITagAdminAppService : ICrudAppService<TagDto, Guid, TagGetListInput, TagCreateDto, TagUpdateDto>
{
Task<List<TagDefinitionDto>> GetTagDefinitionsAsync();
}
}

@ -0,0 +1,8 @@
namespace Volo.CmsKit.Admin.Tags
{
public class TagDefinitionDto
{
public string EntityType { get; set; }
public string DisplayName { get; set; }
}
}

@ -1,8 +1,10 @@
using AutoMapper;
using Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Tags;
using Volo.CmsKit.Admin.Contents;
using Volo.CmsKit.Admin.Pages;
using Volo.CmsKit.Contents;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Tags;
namespace Volo.CmsKit.Admin
{
@ -15,6 +17,8 @@ namespace Volo.CmsKit.Admin
CreateMap<Content, ContentDto>(MemberList.Destination);
CreateMap<ContentCreateDto, Content>(MemberList.Source);
CreateMap<ContentUpdateDto, Content>(MemberList.Source);
CreateMap<TagDefiniton, TagDefinitionDto>(MemberList.Destination);
}
}
}

@ -2,11 +2,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.CmsKit.Admin.Tags;
using Volo.CmsKit.Permissions;
using Volo.CmsKit.Tags;
@ -68,5 +66,12 @@ namespace Volo.CmsKit.Admin.Tags
x.Name.ToLower().Contains(input.Filter) ||
x.EntityType.ToLower().Contains(input.Filter));
}
public async Task<List<TagDefinitionDto>> GetTagDefinitionsAsync()
{
var definitions = await TagManager.GetTagDefinitionsAsync();
return ObjectMapper.Map<List<TagDefiniton>, List<TagDefinitionDto>>(definitions);
}
}
}

@ -1,6 +1,11 @@
using Volo.Abp.Domain;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Users;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Localization;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Reactions;
namespace Volo.CmsKit
@ -28,7 +33,20 @@ namespace Volo.CmsKit
options.Reactions.AddOrReplace(StandardReactions.HeartBroken);
options.Reactions.AddOrReplace(StandardReactions.Rocket);
options.Reactions.AddOrReplace(StandardReactions.Pray);
if (GlobalFeatureManager.Instance.IsEnabled<TagsFeature>())
{
if (GlobalFeatureManager.Instance.IsEnabled<PagesFeature>())
{
options.Tags.AddOrReplace(typeof(Page).Name, L("Page"));
}
}
});
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<CmsKitResource>(name);
}
}
}

@ -1,16 +1,15 @@
using JetBrains.Annotations;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Tags;
namespace Volo.CmsKit
{
public class CmsKitOptions
{
[NotNull]
public ReactionDefinitionDictionary Reactions { get; }
public ReactionDefinitionDictionary Reactions { get; } = new ReactionDefinitionDictionary();
public CmsKitOptions()
{
Reactions = new ReactionDefinitionDictionary();
}
[NotNull]
public TagDefinitionDictionary Tags { get; } = new TagDefinitionDictionary();
}
}

@ -0,0 +1,37 @@
using JetBrains.Annotations;
using Volo.Abp;
using Volo.Abp.Localization;
namespace Volo.CmsKit.Domain.Volo.CmsKit
{
public abstract class PolicySpecifiedDefinition
{
protected PolicySpecifiedDefinition()
{
}
public PolicySpecifiedDefinition(
[CanBeNull] ILocalizableString displayName = null,
[CanBeNull] string createPolicy = null,
[CanBeNull] string updatePolicy = null,
[CanBeNull] string deletePolicy = null)
{
DisplayName = displayName;
CreatePolicy = createPolicy;
DeletePolicy = deletePolicy;
UpdatePolicy = updatePolicy;
}
[CanBeNull]
public virtual ILocalizableString DisplayName { get; }
[CanBeNull]
public virtual string CreatePolicy { get; set; }
[CanBeNull]
public virtual string UpdatePolicy { get; set; }
[CanBeNull]
public virtual string DeletePolicy { get; set; }
}
}

@ -0,0 +1,33 @@
using JetBrains.Annotations;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.DependencyInjection;
namespace Volo.CmsKit.Tags
{
public class DefaultTagDefinitionStore : ITagDefinitionStore, ITransientDependency
{
private readonly CmsKitOptions options;
public DefaultTagDefinitionStore(IOptions<CmsKitOptions> options)
{
this.options = options.Value;
}
public Task<TagDefiniton> GetTagDefinitionOrNullAsync([NotNull] string entityType)
{
Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
return Task.FromResult(options.Tags.GetOrDefault(entityType));
}
public Task<List<TagDefiniton>> GetTagDefinitionsAsync()
{
return Task.FromResult(options.Tags.Values.ToList());
}
}
}

@ -0,0 +1,13 @@
using JetBrains.Annotations;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.CmsKit.Tags
{
public interface ITagDefinitionStore
{
Task<List<TagDefiniton>> GetTagDefinitionsAsync();
Task<TagDefiniton> GetTagDefinitionOrNullAsync([NotNull] string entityType);
}
}

@ -1,5 +1,6 @@
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
@ -26,5 +27,7 @@ namespace Volo.CmsKit.Tags
[NotNull] string name,
Guid? tenantId = null,
CancellationToken cancellationToken = default);
Task<List<TagDefiniton>> GetTagDefinitionsAsync(CancellationToken cancellationToken = default);
}
}

@ -0,0 +1,20 @@
using JetBrains.Annotations;
using System.Collections.Generic;
using Volo.Abp.Localization;
namespace Volo.CmsKit.Tags
{
public class TagDefinitionDictionary : Dictionary<string, TagDefiniton>
{
public void AddOrReplace(
[NotNull] string entityType,
[CanBeNull] ILocalizableString displayName = null,
[CanBeNull] string createPolicy = null,
[CanBeNull] string updatePolicy = null,
[CanBeNull] string deletePolicy = null
)
{
this[entityType] = new TagDefiniton(entityType, displayName, createPolicy, updatePolicy, deletePolicy);
}
}
}

@ -0,0 +1,27 @@
using JetBrains.Annotations;
using Volo.Abp;
using Volo.Abp.Localization;
using Volo.CmsKit.Domain.Volo.CmsKit;
namespace Volo.CmsKit.Tags
{
public class TagDefiniton : PolicySpecifiedDefinition
{
public string EntityType { get; }
public TagDefiniton()
{
}
public TagDefiniton(
[NotNull] string entityType,
[CanBeNull] ILocalizableString displayName = null,
[CanBeNull] string createPolicy = null,
[CanBeNull] string updatePolicy = null,
[CanBeNull] string deletePolicy = null) : base(displayName, createPolicy, updatePolicy, deletePolicy)
{
EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
}
}
}

@ -1,5 +1,8 @@
using JetBrains.Annotations;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp;
@ -10,10 +13,14 @@ namespace Volo.CmsKit.Tags
public class TagManager : DomainService, ITagManager
{
private readonly ITagRepository _tagRepository;
private readonly ITagDefinitionStore _tagDefinitionStore;
public TagManager(ITagRepository tagRepository)
public TagManager(
ITagRepository tagRepository,
ITagDefinitionStore tagDefinitionStore)
{
_tagRepository = tagRepository;
_tagDefinitionStore = tagDefinitionStore;
}
public async Task<Tag> GetOrAddAsync(
@ -70,5 +77,10 @@ namespace Volo.CmsKit.Tags
return await _tagRepository.UpdateAsync(entity, cancellationToken: cancellationToken);
}
public Task<List<TagDefiniton>> GetTagDefinitionsAsync(CancellationToken cancellationToken = default)
{
return _tagDefinitionStore.GetTagDefinitionsAsync();
}
}
}

@ -12,6 +12,5 @@ namespace Volo.CmsKit
)]
public class CmsKitDomainTestModule : AbpModule
{
}
}

@ -100,5 +100,15 @@ namespace Volo.CmsKit.Tags
Should.Throw<Exception>(async () => await _tagManager.UpdateAsync(tag.Id, newName));
}
[Fact]
public async Task ShouldGetTagDefinitionsProperly_WithoutParameter()
{
var definitions = await _tagManager.GetTagDefinitionsAsync();
definitions.ShouldNotBeNull();
definitions.Count.ShouldBeGreaterThan(1);
definitions.ShouldContain(x => x.EntityType == _cmsKitTestData.TagDefinition_1_EntityType);
}
}
}

@ -1,4 +1,5 @@
using System;
using Microsoft.Extensions.Options;
using System;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Data;
@ -29,6 +30,8 @@ namespace Volo.CmsKit
private readonly IEntityTagRepository _entityTagRepository;
private readonly ITagManager _tagManager;
private readonly IPageRepository _pageRepository;
private readonly IOptions<CmsKitOptions> _options;
public CmsKitDataSeedContributor(
IGuidGenerator guidGenerator,
ICmsUserRepository cmsUserRepository,
@ -40,7 +43,8 @@ namespace Volo.CmsKit
IContentRepository contentRepository,
ITagManager tagManager,
IEntityTagRepository entityTagRepository,
IPageRepository pageRepository)
IPageRepository pageRepository,
IOptions<CmsKitOptions> options)
{
_guidGenerator = guidGenerator;
_cmsUserRepository = cmsUserRepository;
@ -53,6 +57,7 @@ namespace Volo.CmsKit
_tagManager = tagManager;
_entityTagRepository = entityTagRepository;
_pageRepository = pageRepository;
_options = options;
}
public async Task SeedAsync(DataSeedContext context)
@ -72,9 +77,18 @@ namespace Volo.CmsKit
await SeedTagsAsync();
await SeedPagesAsync();
await ConfigureCmsKitOptionsAsync();
}
}
private Task ConfigureCmsKitOptionsAsync()
{
_options.Value.Tags.AddOrReplace(_cmsKitTestData.TagDefinition_1_EntityType);
return Task.CompletedTask;
}
private async Task SeedUsersAsync()
{
await _cmsUserRepository.InsertAsync(new CmsUser(new UserData(_cmsKitTestData.User1Id, "user1",

@ -59,5 +59,7 @@ namespace Volo.CmsKit
public Guid Page_2_Id { get; } = Guid.NewGuid();
public string Page_2_Content => Content_2;
public string TagDefinition_1_EntityType => "My.Namespace.CustomType";
}
}

Loading…
Cancel
Save