diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs index 6316a44d04..5d4a9b03e0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs @@ -46,11 +46,13 @@ namespace Volo.CmsKit.Admin.Tags [Authorize(CmsKitAdminPermissions.Tags.Create)] public override async Task 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 CreateFilteredQuery(TagGetListInput input) + + protected override async Task> CreateFilteredQueryAsync(TagGetListInput input) { - return base.CreateFilteredQuery(input) + return (await base.CreateFilteredQueryAsync(input)) .WhereIf( !input.Filter.IsNullOrEmpty(), x => diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs index d0a97b7331..fd2f83536f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs @@ -21,11 +21,18 @@ namespace Volo.CmsKit.Tags public virtual async Task 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 InsertAsync(Guid id, + public virtual async Task 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 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; } } } \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagManager_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagManager_Tests.cs index 2eadaa55fb..0aadc33caf 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagManager_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagManager_Tests.cs @@ -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(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(async () => await _tagManager.InsertAsync(Guid.NewGuid(), type, name)); + Should.Throw(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] diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 56e28ed27e..bb2d4cd619 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -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); }