diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs index aa0fecaf09..d6c9303afd 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var blobName = AliyunBlobNameCalculator.Calculate(args); var aliyunConfig = args.Configuration.GetAliyunConfiguration(); var ossClient = GetOssClient(aliyunConfig); - if (!args.OverrideExisting && BlobExistsAsync(ossClient, containerName, blobName)) + if (!args.OverrideExisting && BlobExists(ossClient, containerName, blobName)) { throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{containerName}'! Set {nameof(args.OverrideExisting)} if it should be overwritten."); } @@ -57,7 +57,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var containerName = GetContainerName(args); var blobName = AliyunBlobNameCalculator.Calculate(args); var ossClient = GetOssClient(args.Configuration); - if(!BlobExistsAsync(ossClient, containerName, blobName)) + if(!BlobExists(ossClient, containerName, blobName)) { return Task.FromResult(false); } @@ -70,7 +70,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var containerName = GetContainerName(args); var blobName = AliyunBlobNameCalculator.Calculate(args); var ossClient = GetOssClient(args.Configuration); - return Task.FromResult(BlobExistsAsync(ossClient, containerName, blobName)); + return Task.FromResult(BlobExists(ossClient, containerName, blobName)); } public async override Task GetOrNullAsync(BlobProviderGetArgs args) @@ -78,7 +78,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var containerName = GetContainerName(args); var blobName = AliyunBlobNameCalculator.Calculate(args); var ossClient = GetOssClient(args.Configuration); - if (!BlobExistsAsync(ossClient, containerName, blobName)) + if (!BlobExists(ossClient, containerName, blobName)) { return null; } @@ -96,7 +96,7 @@ namespace Volo.Abp.BlobStoring.Aliyun : configuration.ContainerName; } - private bool BlobExistsAsync(IOss ossClient,string containerName, string blobName) + private bool BlobExists(IOss ossClient,string containerName, string blobName) { // Make sure Blob Container exists. return ossClient.DoesBucketExist(containerName) && diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs index 757ad4b54c..276cbd8fc7 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs @@ -81,7 +81,7 @@ namespace Volo.Abp.BlobStoring.Aliyun /// public string ContainerName { - get => _containerConfiguration.GetConfiguration(AliyunBlobProviderConfigurationNames.ContainerName); + get => _containerConfiguration.GetConfigurationOrDefault(AliyunBlobProviderConfigurationNames.ContainerName); set => _containerConfiguration.SetConfiguration(AliyunBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); } diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs index c2d3297f4e..2be373e428 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs @@ -81,7 +81,7 @@ namespace Volo.Abp.BlobStoring.Aws /// public string ContainerName { - get => _containerConfiguration.GetConfiguration(AwsBlobProviderConfigurationNames.ContainerName); + get => _containerConfiguration.GetConfigurationOrDefault(AwsBlobProviderConfigurationNames.ContainerName); set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); } diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs index 7ab338794b..969057d7d6 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs @@ -16,7 +16,7 @@ /// public string ContainerName { - get => _containerConfiguration.GetConfiguration(AzureBlobProviderConfigurationNames.ContainerName); + get => _containerConfiguration.GetConfigurationOrDefault(AzureBlobProviderConfigurationNames.ContainerName); set => _containerConfiguration.SetConfiguration(AzureBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); } diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs index 63b0132d20..395aa76a72 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs @@ -4,7 +4,7 @@ { public string BucketName { - get => _containerConfiguration.GetConfiguration(MinioBlobProviderConfigurationNames.BucketName); + get => _containerConfiguration.GetConfigurationOrDefault(MinioBlobProviderConfigurationNames.BucketName); set => _containerConfiguration.SetConfiguration(MinioBlobProviderConfigurationNames.BucketName, Check.NotNullOrWhiteSpace(value, nameof(value))); } @@ -42,7 +42,7 @@ { get => _containerConfiguration.GetConfigurationOrDefault(MinioBlobProviderConfigurationNames.WithSSL, false); set => _containerConfiguration.SetConfiguration(MinioBlobProviderConfigurationNames.WithSSL, value); - } + } /// ///Default value: false. diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml index 4818533f44..9f92acb27b 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml @@ -8,7 +8,7 @@ @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection -@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags @model IndexModel @inject IStringLocalizer Localizer

CMS Kit DEMO

diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/CmsKitPublicRemoteServiceConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/CmsKitAdminRemoteServiceConsts.cs similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/CmsKitPublicRemoteServiceConsts.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/CmsKitAdminRemoteServiceConsts.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/ITagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/ITagAdminAppService.cs new file mode 100644 index 0000000000..e677a54c28 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/ITagAdminAppService.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Application.Services; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Admin.Tags +{ + public interface ITagAdminAppService : ICrudAppService + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs new file mode 100644 index 0000000000..3eb75bec07 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagCreateDto + { + [Required] + public string EntityType { get; set; } + [Required] + public string Name { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagGetListInput.cs new file mode 100644 index 0000000000..23e7041134 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagGetListInput.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagGetListInput : PagedAndSortedResultRequestDto + { + public string Filter { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs new file mode 100644 index 0000000000..4df242a997 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs @@ -0,0 +1,10 @@ +using System.ComponentModel.DataAnnotations; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagUpdateDto + { + [Required] + public string Name { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs new file mode 100644 index 0000000000..2cb6a53b58 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs @@ -0,0 +1,25 @@ +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; +using Volo.CmsKit.Localization; + +namespace Volo.CmsKit.Permissions +{ + public class CmsKitAdminPermissionDefinitionProvider : PermissionDefinitionProvider + { + public override void Define(IPermissionDefinitionContext context) + { + var cmsGroup = context.GetGroupOrNull(CmsKitAdminPermissions.GroupName) ?? context.AddGroup(CmsKitAdminPermissions.GroupName, L("Permission:CmsKit")); + + cmsGroup + .AddPermission(CmsKitAdminPermissions.Tags.Default, L("Permission:TagManagement")) + .AddChild(CmsKitAdminPermissions.Tags.Create, L("Permission:TagManagement.Create")) + .AddChild(CmsKitAdminPermissions.Tags.Update, L("Permission:TagManagement.Update")) + .AddChild(CmsKitAdminPermissions.Tags.Delete, L("Permission:TagManagement.Delete")); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs new file mode 100644 index 0000000000..26daeb0b01 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs @@ -0,0 +1,16 @@ +using Volo.Abp.Reflection; + +namespace Volo.CmsKit.Permissions +{ + public class CmsKitAdminPermissions + { + public const string GroupName = "CmsKit"; + public static class Tags + { + public const string Default = GroupName + ".Tags"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + } + } +} 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 new file mode 100644 index 0000000000..cda45c23de --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs @@ -0,0 +1,72 @@ +using Microsoft.AspNetCore.Authorization; +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; + +namespace Volo.CmsKit.Admin.Tags +{ + [Authorize(CmsKitAdminPermissions.Tags.Default)] + public class TagAdminAppService : + CrudAppService< + Tag, + TagDto, + Guid, + TagGetListInput, + TagCreateDto, + TagUpdateDto>, + ITagAdminAppService + { + protected ITagManager TagManager { get; } + + public TagAdminAppService( + IRepository repository, + ITagManager tagManager) : base(repository) + { + TagManager = tagManager; + + GetListPolicyName = CmsKitAdminPermissions.Tags.Default; + GetPolicyName = CmsKitAdminPermissions.Tags.Default; + CreatePolicyName = CmsKitAdminPermissions.Tags.Create; + UpdatePolicyName = CmsKitAdminPermissions.Tags.Update; + DeletePolicyName = CmsKitAdminPermissions.Tags.Delete; + } + + [Authorize(CmsKitAdminPermissions.Tags.Create)] + public override async Task CreateAsync(TagCreateDto input) + { + var tag = await TagManager.InsertAsync( + GuidGenerator.Create(), + input.EntityType, + input.Name, + CurrentTenant?.Id); + + return MapToGetOutputDto(tag); + } + + [Authorize(CmsKitAdminPermissions.Tags.Update)] + public override async Task UpdateAsync(Guid id, TagUpdateDto input) + { + var tag = await TagManager.UpdateAsync( + id, + input.Name); + + return MapToGetOutputDto(tag); + } + protected override IQueryable CreateFilteredQuery(TagGetListInput input) + { + return base.CreateFilteredQuery(input) + .WhereIf( + !input.Filter.IsNullOrEmpty(), + x => + x.Name.ToLower().Contains(input.Filter) || + x.EntityType.ToLower().Contains(input.Filter)); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagController.cs new file mode 100644 index 0000000000..11dcc9a846 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagController.cs @@ -0,0 +1,56 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.CmsKit.Admin.Tags; +using Volo.CmsKit.Permissions; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagController : CmsKitAdminController, ITagAdminAppService + { + protected ITagAdminAppService TagAdminAppService { get; } + + public TagController(ITagAdminAppService tagAdminAppService) + { + TagAdminAppService = tagAdminAppService; + } + + [HttpPost] + [Authorize(CmsKitAdminPermissions.Tags.Create)] + public Task CreateAsync(TagCreateDto input) + { + return TagAdminAppService.CreateAsync(input); + } + + [HttpDelete("{id}")] + [Authorize(CmsKitAdminPermissions.Tags.Delete)] + public Task DeleteAsync(Guid id) + { + return TagAdminAppService.DeleteAsync(id); + } + + [HttpGet("{id}")] + [Authorize(CmsKitAdminPermissions.Tags.Default)] + public Task GetAsync(Guid id) + { + return TagAdminAppService.GetAsync(id); + } + + [HttpGet] + [Authorize(CmsKitAdminPermissions.Tags.Default)] + public Task> GetListAsync(TagGetListInput input) + { + return TagAdminAppService.GetListAsync(input); + } + + [HttpPut("{id}")] + [Authorize(CmsKitAdminPermissions.Tags.Update)] + public Task UpdateAsync(Guid id, [FromBody] TagUpdateDto input) + { + return TagAdminAppService.UpdateAsync(id, input); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 73fd2d52b6..42d56b8d16 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -1,22 +1,29 @@ { "culture": "en", "texts": { - "PickYourReaction": "Pick your reaction", - "YourComment": "Your comment", - "YourReply": "Your reply", + "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", "Comments": "Comments", - "Send": "Send", "Delete": "Delete", - "Reply": "Reply", - "Update": "Update", "Edit": "Edit", "LoginToAddComment": "Login to add comment", + "LoginToRate": "Login to rate", "LoginToReply": "Login to reply", "MessageDeletionConfirmationMessage": "This comment will be deleted completely.", - "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", - "Undo": "Undo", + "Permission:CmsKit": "CmsKit", + "Permission:TagManagement": "Tag Management", + "Permission:TagManagement.Create": "Create Tag", + "Permission:TagManagement.Delete": "Delete Tag", + "Permission:TagManagement.Update": "Update Tag", + "PickYourReaction": "Pick your reaction", "RatingUndoMessage": "Your rating will be undo.", - "LoginToRate": "Login to rate", - "Star": "Star" + "Reply": "Reply", + "Send": "Send", + "Star": "Star", + "TagDeletionConfirmationMessage": "Are you sure to delete '{0}' tag?", + "Tags": "Tags", + "Undo": "Undo", + "Update": "Update", + "YourComment": "Your comment", + "YourReply": "Your reply" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 777e89c979..ac8bd98a9f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -1,22 +1,29 @@ { "culture": "tr", "texts": { - "PickYourReaction": "Tepkinizi seçin", - "YourComment": "Yorumunuz", - "YourReply": "Cevabınız", + "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", "Comments": "Yorumlar", - "Send": "Gönder", "Delete": "Sil", - "Reply": "Cevapla", - "Update": "Güncelle", "Edit": "Düzenle", "LoginToAddComment": "Yorum yapmak için giriş yap", + "LoginToRate": "Oylamak için giriş yapın", "LoginToReply": "Cevap vermek için giriş yap", "MessageDeletionConfirmationMessage": "Bu yorum tamamen silinecektir", - "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", - "Undo": "Geri al", + "Permission:CmsKit": "CmsKit", + "Permission:TagManagement": "Etiket Yönetimi", + "Permission:TagManagement.Create": "Etiket Oluşturma", + "Permission:TagManagement.Delete": "Etiket Silme", + "Permission:TagManagement.Update": "Etiket Güncelleme", + "PickYourReaction": "Tepkinizi seçin", "RatingUndoMessage": "Oylamanız geri alınacak.", - "LoginToRate": "Oylamak için giriş yapın", - "Star": "Yıldız" + "Reply": "Cevapla", + "Send": "Gönder", + "Star": "Yıldız", + "TagDeletionConfirmationMessage": "'{0}' etiketini silmek istediğinize emin misiniz?", + "Tags": "Etiketler", + "Undo": "Geri al", + "Update": "Güncelle", + "YourComment": "Yorumunuz", + "YourReply": "Cevabınız" } } 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 2dc1f0b28c..e1e9366a99 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 @@ -45,12 +45,12 @@ namespace Volo.CmsKit.Tags } return await _tagRepository.InsertAsync( - new Tag( - id, - entityType, - name, - tenantId), - cancellationToken: cancellationToken); + new Tag( + id, + entityType, + name, + tenantId), + cancellationToken: cancellationToken); } public async Task UpdateAsync( @@ -59,15 +59,16 @@ namespace Volo.CmsKit.Tags CancellationToken cancellationToken = default) { var entity = await _tagRepository.GetAsync(id, cancellationToken: cancellationToken); - - if (name != entity.Name && await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) + + if (name != entity.Name && + await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) { throw new BusinessException(message: "Tag already exist!"); // Already Exist } entity.SetName(name); - - return await _tagRepository.UpdateAsync(entity); + + return await _tagRepository.UpdateAsync(entity, cancellationToken: cancellationToken); } } -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/GetRelatedTagsInput.cs similarity index 62% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/GetRelatedTagsInput.cs index ca9cd31b16..b8df8ec439 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/GetRelatedTagsInput.cs @@ -1,7 +1,6 @@ -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations; -namespace Volo.CmsKit.Tags +namespace Volo.CmsKit.Public.Tags { public class GetRelatedTagsInput { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs similarity index 81% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs index f831d0f735..29d786f086 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Services; +using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Tags +namespace Volo.CmsKit.Public.Tags { public interface ITagAppService : IApplicationService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs similarity index 90% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs index 4e096d9bf6..8feaaa0130 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; using System.Threading.Tasks; +using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Tags +namespace Volo.CmsKit.Public.Tags { public class TagAppService : CmsKitAppServiceBase, ITagAppService { @@ -13,7 +15,7 @@ namespace Volo.CmsKit.Tags public TagAppService( ITagManager tagManager, - ITagRepository tagRepository, + ITagRepository tagRepository, IEntityTagRepository entityTagRepository) { TagManager = tagManager; diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagController.cs similarity index 76% rename from modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagController.cs index 89f469ef93..307c5a4247 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagController.cs @@ -1,15 +1,15 @@ -using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Controllers.Tags +namespace Volo.CmsKit.Public.Tags { [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Route("api/cms-kit/tags")] - public class TagController : CmsKitControllerBase, ITagAppService + public class TagController : CmsKitPublicControllerBase, ITagAppService { protected readonly ITagAppService TagAppService; diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml similarity index 72% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml index f1dd2008ac..f7c61dbc81 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml @@ -1,4 +1,4 @@ -@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags @model TagViewComponent.TagViewModel diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs similarity index 93% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs index 9e787c4d4c..44deaad0ed 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs @@ -5,9 +5,10 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Public.Tags; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags { [ViewComponent(Name = "CmsTags")] public class TagViewComponent : AbpViewComponent diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs new file mode 100644 index 0000000000..35b46b5a04 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs @@ -0,0 +1,78 @@ +using Microsoft.Extensions.DependencyInjection; +using NSubstitute; +using Shouldly; +using System.Threading.Tasks; +using Volo.Abp.Clients; +using Volo.Abp.Users; +using Volo.Abp.Validation; +using Volo.CmsKit.Public.Tags; +using Xunit; + +namespace Volo.CmsKit.Tags +{ + public class TagAppService_Tests : CmsKitApplicationTestBase + { + private readonly ITagAppService _tagAppService; + private ICurrentUser _currentUser; + private readonly CmsKitTestData _cmsKitTestData; + + public TagAppService_Tests() + { + _tagAppService = GetRequiredService(); + _cmsKitTestData = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + _currentUser = Substitute.For(); + services.AddSingleton(_currentUser); + } + + [Fact] + public async Task GetAllRelatedTagsAsync() + { + var list = await _tagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityType = _cmsKitTestData.Content_1_EntityType, + EntityId = _cmsKitTestData.EntityId1 + }); + + list.ShouldNotBeEmpty(); + list.Count.ShouldBe(2); + } + + [Fact] + public async Task ShouldntGet_GetAllRelatedTagsAsync() + { + var list = await _tagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityType = "any_other_type", + EntityId = "1" + }); + + list.ShouldBeEmpty(); + } + + [Fact] + public async Task GetRelatedTagsAsync_ShouldThrowValidationException_WithoutEntityType() + { + await Assert.ThrowsAsync(async () => + await _tagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityType = null, + EntityId = _cmsKitTestData.EntityId1 + })); + } + + [Fact] + public async Task GetRelatedTagsAsync_ShouldThrowValidationException_WithoutEntityId() + { + await Assert.ThrowsAsync(async () => + await _tagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityType = null, + EntityId = _cmsKitTestData.EntityId1 + })); + } + } +}