CmsKit - Remove Db write operation from TagManager.Update

pull/7848/head
enisn 5 years ago
parent 2a7aa8f855
commit 2374b91c33

@ -46,11 +46,13 @@ namespace Volo.CmsKit.Admin.Tags
[Authorize(CmsKitAdminPermissions.Tags.Create)]
public override async Task<TagDto> CreateAsync(TagCreateDto input)
{
var tag = await TagManager.InsertAsync(
var tag = await TagManager.CreateAsync(
GuidGenerator.Create(),
input.EntityType,
input.Name);
await Repository.InsertAsync(tag);
return await MapToGetOutputDtoAsync(tag);
}
@ -61,11 +63,14 @@ namespace Volo.CmsKit.Admin.Tags
id,
input.Name);
await Repository.UpdateAsync(tag);
return await MapToGetOutputDtoAsync(tag);
}
protected override IQueryable<Tag> CreateFilteredQuery(TagGetListInput input)
protected override async Task<IQueryable<Tag>> CreateFilteredQueryAsync(TagGetListInput input)
{
return base.CreateFilteredQuery(input)
return (await base.CreateFilteredQueryAsync(input))
.WhereIf(
!input.Filter.IsNullOrEmpty(),
x =>

@ -21,11 +21,18 @@ namespace Volo.CmsKit.Tags
public virtual async Task<Tag> GetOrAddAsync([NotNull] string entityType, [NotNull] string name)
{
return await TagRepository.FindAsync(entityType, name)
?? await InsertAsync(GuidGenerator.Create(), entityType, name);
var tag = await TagRepository.FindAsync(entityType, name);
if (tag == null)
{
tag = await CreateAsync(GuidGenerator.Create(), entityType, name);
await TagRepository.InsertAsync(tag);
}
return tag;
}
public virtual async Task<Tag> InsertAsync(Guid id,
public virtual async Task<Tag> CreateAsync(Guid id,
[NotNull] string entityType,
[NotNull] string name)
{
@ -39,8 +46,8 @@ namespace Volo.CmsKit.Tags
throw new TagAlreadyExistException(entityType, name);
}
return await TagRepository.InsertAsync(
new Tag(id, entityType, name, CurrentTenant.Id));
return
new Tag(id, entityType, name, CurrentTenant.Id);
}
public virtual async Task<Tag> UpdateAsync(Guid id,
@ -48,17 +55,17 @@ namespace Volo.CmsKit.Tags
{
Check.NotNullOrEmpty(name, nameof(name));
var entity = await TagRepository.GetAsync(id);
var tag = await TagRepository.GetAsync(id);
if (name != entity.Name &&
await TagRepository.AnyAsync(entity.EntityType, name))
if (name != tag.Name &&
await TagRepository.AnyAsync(tag.EntityType, name))
{
throw new TagAlreadyExistException(entity.EntityType, name);
throw new TagAlreadyExistException(tag.EntityType, name);
}
entity.SetName(name);
tag.SetName(name);
return await TagRepository.UpdateAsync(entity);
return tag;
}
}
}

@ -53,24 +53,23 @@ namespace Volo.CmsKit.Tags
}
[Fact]
public async Task ShouldInsertAsync()
public async Task ShouldCreateAsync()
{
var tagName = "Freshly Created New Tag";
var tag = await _tagManager.InsertAsync(Guid.NewGuid(), _cmsKitTestData.EntityType1, tagName);
var tag = await _tagManager.CreateAsync(Guid.NewGuid(), _cmsKitTestData.EntityType1, tagName);
tag.ShouldNotBeNull();
var doesExist = await _tagRepository.AnyAsync(_cmsKitTestData.EntityType1, tagName);
doesExist.ShouldBeTrue();
tag.Id.ShouldNotBe(Guid.Empty);
}
[Fact]
public async Task ShouldntInsertWithUnconfiguredEntityTypeAsync()
{
var notConfiguredEntityType = "My.Namespace.SomeEntity";
var exception = await Should.ThrowAsync<EntityNotTaggableException>(async () =>
await _tagManager.InsertAsync(Guid.NewGuid(), notConfiguredEntityType, "test"));
await _tagManager.CreateAsync(Guid.NewGuid(), notConfiguredEntityType, "test"));
exception.ShouldNotBeNull();
exception.Data[nameof(Tag.EntityType)].ShouldBe(notConfiguredEntityType);
@ -82,7 +81,7 @@ namespace Volo.CmsKit.Tags
var type = _cmsKitTestData.Content_1_EntityType;
var name = _cmsKitTestData.Content_1_Tags[0];
Should.Throw<Exception>(async () => await _tagManager.InsertAsync(Guid.NewGuid(), type, name));
Should.Throw<Exception>(async () => await _tagManager.CreateAsync(Guid.NewGuid(), type, name));
}
[Fact]
@ -94,11 +93,10 @@ namespace Volo.CmsKit.Tags
var tag = await _tagRepository.GetAsync(type, name);
await _tagManager.UpdateAsync(tag.Id, newName);
var updatedTag = await _tagRepository.GetAsync(type, newName);
var updatedTag = await _tagManager.UpdateAsync(tag.Id, newName);
updatedTag.Id.ShouldBe(tag.Id);
updatedTag.Name.ShouldBe(newName);
}
[Fact]

@ -36,6 +36,7 @@ namespace Volo.CmsKit
private readonly IContentRepository _contentRepository;
private readonly EntityTagManager _entityTagManager;
private readonly TagManager _tagManager;
private readonly ITagRepository _tagRepository;
private readonly IEntityTagRepository _entityTagRepository;
private readonly IPageRepository _pageRepository;
private readonly IBlogRepository _blogRepository;
@ -56,6 +57,7 @@ namespace Volo.CmsKit
ICurrentTenant currentTenant,
IContentRepository contentRepository,
TagManager tagManager,
ITagRepository tagRepository,
IEntityTagRepository entityTagRepository,
IPageRepository pageRepository,
IBlogRepository blogRepository,
@ -76,6 +78,7 @@ namespace Volo.CmsKit
_currentTenant = currentTenant;
_contentRepository = contentRepository;
_tagManager = tagManager;
_tagRepository = tagRepository;
_entityTagManager = entityTagManager;
_entityTagRepository = entityTagRepository;
_pageRepository = pageRepository;
@ -285,24 +288,40 @@ namespace Volo.CmsKit
private async Task SeedTagsAsync()
{
var created1 = await _tagManager.InsertAsync(_cmsKitTestData.TagId_1, _cmsKitTestData.EntityType1, _cmsKitTestData.TagName_1);
var created1 = await _tagRepository.InsertAsync(
await _tagManager.CreateAsync(
_cmsKitTestData.TagId_1,
_cmsKitTestData.EntityType1,
_cmsKitTestData.TagName_1));
await _entityTagManager.AddTagToEntityAsync(created1.Id, created1.EntityType, _cmsKitTestData.EntityId1);
var created2 = await _tagManager.InsertAsync(_cmsKitTestData.TagId_2, _cmsKitTestData.EntityType2, _cmsKitTestData.TagName_2);
var created2 = await _tagRepository.InsertAsync(
await _tagManager.CreateAsync(
_cmsKitTestData.TagId_2,
_cmsKitTestData.EntityType2,
_cmsKitTestData.TagName_2));
await _entityTagManager.AddTagToEntityAsync(created2.Id, created2.EntityType, _cmsKitTestData.EntityId2);
foreach (var tag in _cmsKitTestData.Content_1_Tags)
{
var tagEntity = await _tagManager.InsertAsync(_guidGenerator.Create(), _cmsKitTestData.Content_1_EntityType, tag);
var tagEntity = await _tagRepository.InsertAsync(
await _tagManager.CreateAsync(
_guidGenerator.Create(),
_cmsKitTestData.Content_1_EntityType,
tag));
await _entityTagManager.AddTagToEntityAsync(tagEntity.Id, _cmsKitTestData.Content_1_EntityType, _cmsKitTestData.Content_1_EntityId);
}
foreach (var tag in _cmsKitTestData.Content_2_Tags)
{
var tagEntity = await _tagManager.InsertAsync(_guidGenerator.Create(), _cmsKitTestData.Content_2_EntityType, tag);
var tagEntity = await _tagRepository.InsertAsync(
await _tagManager.CreateAsync(
_guidGenerator.Create(),
_cmsKitTestData.Content_2_EntityType,
tag));
await _entityTagManager.AddTagToEntityAsync(tagEntity.Id, _cmsKitTestData.Content_2_EntityType, _cmsKitTestData.Content_2_EntityId);
}

Loading…
Cancel
Save