diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs deleted file mode 100644 index cd091fbec5..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Admin.Menus -{ - public interface IMenuAdminAppService : IApplicationService - { - Task> GetListAsync(PagedAndSortedResultRequestDto input); - - Task GetAsync(Guid id); - - Task CreateAsync(MenuCreateInput input); - - Task UpdateAsync(Guid menuId, MenuUpdateInput input); - - Task DeleteAsync(Guid menuId); - - Task GetMenuItemAsync(Guid menuId, Guid menuItemId); - - Task CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input); - - Task UpdateMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemUpdateInput input); - - Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId); - - Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input); - - Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input); - - - Task> GetPageLookupAsync(PageLookupInputDto input); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs new file mode 100644 index 0000000000..e36d4a5caf --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.Admin.Menus +{ + public interface IMenuItemAdminAppService : IApplicationService + { + Task> GetListAsync(); + + Task GetAsync(Guid id); + + Task CreateAsync(MenuItemCreateInput input); + + Task UpdateAsync(Guid id, MenuItemUpdateInput input); + + Task DeleteAsync(Guid id); + + Task MoveMenuItemAsync(Guid id, MenuItemMoveInput input); + + Task> GetPageLookupAsync(PageLookupInputDto input); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs index 6ee0fdd4eb..c57b689c95 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs @@ -6,8 +6,6 @@ namespace Volo.CmsKit.Admin.Menus [Serializable] public class MenuItemCreateInput { - public Guid MenuId { get; set; } - public Guid? ParentId { get; set; } [Required] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs index c4e29cf143..30ed1041a4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs @@ -43,7 +43,6 @@ namespace Volo.CmsKit.Admin CreateMap(); - CreateMap(); CreateMap(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs deleted file mode 100644 index 582a8928de..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs +++ /dev/null @@ -1,207 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Domain.Entities; -using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.GlobalFeatures; -using Volo.CmsKit.Menus; -using Volo.CmsKit.Pages; -using Volo.CmsKit.Permissions; - -namespace Volo.CmsKit.Admin.Menus -{ - [RequiresGlobalFeature(typeof(MenuFeature))] - [Authorize(CmsKitAdminPermissions.Menus.Default)] - public class MenuAdminAppService : CmsKitAdminAppServiceBase, IMenuAdminAppService - { - protected MenuManager MenuManager { get; } - protected IMenuRepository MenuRepository { get; } - protected IPageRepository PageRepository { get; } - - public MenuAdminAppService( - MenuManager menuManager, - IMenuRepository menuRepository, - IPageRepository pageRepository) - { - MenuManager = menuManager; - MenuRepository = menuRepository; - PageRepository = pageRepository; - } - - public async Task> GetListAsync(PagedAndSortedResultRequestDto input) - { - var menus = await MenuRepository.GetPagedListAsync(input.SkipCount, input.MaxResultCount, input.Sorting); - - return new PagedResultDto( - await MenuRepository.GetCountAsync(), - ObjectMapper.Map, List>(menus) - ); - } - - public async Task GetAsync(Guid id) - { - var menu = await MenuRepository.GetAsync(id, includeDetails: true); - return ObjectMapper.Map(menu); - } - - public async Task GetSimpleAsync(Guid id) - { - var menu = await MenuRepository.GetAsync(id, includeDetails: false); - return ObjectMapper.Map(menu); - } - - [Authorize(CmsKitAdminPermissions.Menus.Create)] - public async Task CreateAsync(MenuCreateInput input) - { - var menu = await MenuManager.CreateAsync(CurrentTenant.Id, input.Name); - - await MenuRepository.InsertAsync(menu); - - return ObjectMapper.Map(menu); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public async Task UpdateAsync(Guid menuId, MenuUpdateInput input) - { - var menu = await MenuRepository.GetAsync(menuId); - - menu.SetName(input.Name); - - await MenuRepository.UpdateAsync(menu); - - return ObjectMapper.Map(menu); - } - - [Authorize(CmsKitAdminPermissions.Menus.Delete)] - public virtual Task DeleteAsync(Guid menuId) - { - return MenuRepository.DeleteAsync(menuId); - } - - public async Task GetMenuItemAsync(Guid menuId, Guid menuItemId) - { - var menu = await MenuRepository.GetAsync(menuId); - - var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) - ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); - - return ObjectMapper.Map(menuItem); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public virtual async Task CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: true); - - var menuItem = - new MenuItem( - GuidGenerator.Create(), - menuId, - input.DisplayName, - input.Url.IsNullOrEmpty() ? "#" : input.Url, - input.IsActive, - input.ParentId, - input.Icon, - input.Order, - input.Target, - input.ElementId, - input.CssClass); - - if (input.PageId.HasValue) - { - var page = await PageRepository.GetAsync(input.PageId.Value); - MenuManager.SetPageUrl(menuItem, page); - } - - menu.Items.Add(menuItem); - - MenuManager.OrganizeTreeOrderForMenuItem(menu, menuItem); - - await MenuRepository.UpdateAsync(menu); - - return ObjectMapper.Map(menuItem); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public virtual async Task UpdateMenuItemAsync(Guid menuId, Guid menuItemId, - MenuItemUpdateInput input) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: true); - - var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) - ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); - - if (input.PageId.HasValue) - { - MenuManager.SetPageUrl(menuItem, await PageRepository.GetAsync(input.PageId.Value)); - } - else - { - menuItem.SetUrl(input.Url); - } - - menuItem.SetDisplayName(input.DisplayName); - menuItem.IsActive = input.IsActive; - menuItem.Icon = input.Icon; - menuItem.Target = input.Target; - menuItem.ElementId = input.ElementId; - menuItem.CssClass = input.CssClass; - - await MenuRepository.UpdateAsync(menu); - - return ObjectMapper.Map(menuItem); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public virtual async Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: true); - - var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) - ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); - - menu.Items.Remove(menuItem); - - await MenuRepository.UpdateAsync(menu); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public virtual Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input) - { - return MenuManager.MoveAsync(menuId, menuItemId, input.NewParentId, input.Position); - } - - public virtual async Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input) - { - if (input.IsMainMenu) - { - await MenuManager.SetMainMenuAsync(menuId); - } - else - { - await MenuManager.UnSetMainMenuAsync(menuId); - } - } - - public virtual async Task> GetPageLookupAsync(PageLookupInputDto input) - { - var count = await PageRepository.GetCountAsync(input.Filter); - - var pages = await PageRepository.GetListAsync( - input.Filter, - input.MaxResultCount, - input.SkipCount, - input.Sorting - ); - - return new PagedResultDto( - count, - ObjectMapper.Map, List>(pages) - ); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs new file mode 100644 index 0000000000..32458ecb90 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs @@ -0,0 +1,125 @@ +using Microsoft.AspNetCore.Authorization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Menus; +using Volo.CmsKit.Pages; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Menus +{ + [RequiresGlobalFeature(typeof(MenuFeature))] + [Authorize(CmsKitAdminPermissions.Menus.Default)] + public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdminAppService + { + protected MenuItemManager MenuManager { get; } + protected IMenuItemRepository MenuItemRepository { get; } + protected IPageRepository PageRepository { get; } + + public MenuItemAdminAppService( + MenuItemManager menuManager, + IMenuItemRepository menuRepository, + IPageRepository pageRepository) + { + MenuManager = menuManager; + MenuItemRepository = menuRepository; + PageRepository = pageRepository; + } + + public virtual async Task> GetListAsync() + { + var menuItems = await MenuItemRepository.GetListAsync(); + + return new ListResultDto( + ObjectMapper.Map, List>(menuItems) + ); + } + + public virtual async Task GetAsync(Guid id) + { + var menu = await MenuItemRepository.GetAsync(id); + return ObjectMapper.Map(menu); + } + + [Authorize(CmsKitAdminPermissions.Menus.Create)] + public virtual async Task CreateAsync(MenuItemCreateInput input) + { + var menuItem = new MenuItem( + GuidGenerator.Create(), + input.DisplayName, + input.Url.IsNullOrEmpty() ? "#" : input.Url, + input.IsActive, + input.ParentId, + input.Icon, + input.Order, + input.Target, + input.ElementId, + input.CssClass + ); + + await MenuItemRepository.InsertAsync(menuItem); + + return ObjectMapper.Map(menuItem); + } + + [Authorize(CmsKitAdminPermissions.Menus.Update)] + public virtual async Task UpdateAsync(Guid id, MenuItemUpdateInput input) + { + var menuItem = await MenuItemRepository.GetAsync(id); + + if (input.PageId.HasValue) + { + MenuManager.SetPageUrl(menuItem, await PageRepository.GetAsync(input.PageId.Value)); + } + else + { + menuItem.SetUrl(input.Url); + } + + menuItem.SetDisplayName(input.DisplayName); + menuItem.IsActive = input.IsActive; + menuItem.Icon = input.Icon; + menuItem.Target = input.Target; + menuItem.ElementId = input.ElementId; + menuItem.CssClass = input.CssClass; + + await MenuItemRepository.UpdateAsync(menuItem); + + return ObjectMapper.Map(menuItem); + } + + [Authorize(CmsKitAdminPermissions.Menus.Delete)] + public virtual Task DeleteAsync(Guid id) + { + return MenuItemRepository.DeleteAsync(id); + } + + [Authorize(CmsKitAdminPermissions.Menus.Update)] + public virtual Task MoveMenuItemAsync(Guid id, MenuItemMoveInput input) + { + return MenuManager.MoveAsync(id, input.NewParentId, input.Position); + } + + public virtual async Task> GetPageLookupAsync(PageLookupInputDto input) + { + var count = await PageRepository.GetCountAsync(input.Filter); + + var pages = await PageRepository.GetListAsync( + input.Filter, + input.MaxResultCount, + input.SkipCount, + input.Sorting + ); + + return new PagedResultDto( + count, + ObjectMapper.Map, List>(pages) + ); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs index 4b73521f86..1c3be7b4b5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs @@ -1,14 +1,10 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.GlobalFeatures; -using Volo.Abp.UI.Navigation; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Menus; using Volo.CmsKit.Permissions; @@ -19,105 +15,65 @@ namespace Volo.CmsKit.Admin.Menus [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Authorize(CmsKitAdminPermissions.Menus.Default)] - [Route("api/cms-kit-admin/menus")] - public class MenuAdminController : CmsKitAdminController, IMenuAdminAppService + [Route("api/cms-kit-admin/menu-items")] + public class MenuAdminController : CmsKitAdminController, IMenuItemAdminAppService { - protected IMenuAdminAppService MenuAdminAppService { get; } + protected IMenuItemAdminAppService MenuItemAdminAppService { get; } - public MenuAdminController(IMenuAdminAppService menuAdminAppService) + public MenuAdminController(IMenuItemAdminAppService menuAdminAppService) { - MenuAdminAppService = menuAdminAppService; + MenuItemAdminAppService = menuAdminAppService; } - [HttpPost] - [Authorize(CmsKitAdminPermissions.Menus.Create)] - public Task CreateAsync(MenuCreateInput input) - { - return MenuAdminAppService.CreateAsync(input); - } - - [Route("{menuId}/menu-items/{menuItemId}")] - [Authorize(CmsKitAdminPermissions.Menus.Update)] [HttpGet] - public Task GetMenuItemAsync(Guid menuId, Guid menuItemId) - { - return MenuAdminAppService.GetMenuItemAsync(menuId, menuItemId); - } - - [Route("{menuId}/menu-items")] - [HttpPost] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input) - { - return MenuAdminAppService.CreateMenuItemAsync(menuId, input); - } - - [Route("{menuId}")] - [HttpDelete] - [Authorize(CmsKitAdminPermissions.Menus.Delete)] - public Task DeleteAsync(Guid menuId) + public virtual Task> GetListAsync() { - return MenuAdminAppService.DeleteAsync(menuId); + return MenuItemAdminAppService.GetListAsync(); } - [Route("{menuId}/menu-items/{menuItemId}")] - [HttpDelete] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId) - { - return MenuAdminAppService.DeleteMenuItemAsync(menuId, menuItemId); - } - - [Route("{menuId}")] [HttpGet] - public Task GetAsync(Guid menuId) + [Route("{id}")] + public virtual Task GetAsync(Guid id) { - return MenuAdminAppService.GetAsync(menuId); + return MenuItemAdminAppService.GetAsync(id); } - [HttpGet] - public Task> GetListAsync(PagedAndSortedResultRequestDto input) + [HttpPost] + [Authorize(CmsKitAdminPermissions.Menus.Create)] + public virtual Task CreateAsync(MenuItemCreateInput input) { - return MenuAdminAppService.GetListAsync(input); + return MenuItemAdminAppService.CreateAsync(input); } - [Route("{menuId}/menu-items/{menuItemId}/move")] [HttpPut] + [Route("{id}")] [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input) + public virtual Task UpdateAsync(Guid id, MenuItemUpdateInput input) { - return MenuAdminAppService.MoveMenuItemAsync(menuId, menuItemId, input); - } - - [Route("{menuId}/main-menu")] - [HttpPut] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input) - { - return MenuAdminAppService.UpdateMainMenuAsync(menuId, input); + return MenuItemAdminAppService.UpdateAsync(id, input); } - [Route("{menuId}")] - [HttpPut] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task UpdateAsync(Guid menuId, MenuUpdateInput input) + [HttpDelete] + [Route("{id}")] + [Authorize(CmsKitAdminPermissions.Menus.Delete)] + public virtual Task DeleteAsync(Guid id) { - return MenuAdminAppService.UpdateAsync(menuId, input); + return MenuItemAdminAppService.DeleteAsync(id); } - [Route("{menuId}/menu-items/{menuItemId}")] [HttpPut] + [Route("{id}/move")] [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task UpdateMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemUpdateInput input) + public virtual Task MoveMenuItemAsync(Guid id, MenuItemMoveInput input) { - return MenuAdminAppService.UpdateMenuItemAsync(menuId, menuItemId, input); + return MenuItemAdminAppService.MoveMenuItemAsync(id, input); } [HttpGet] [Route("lookup/pages")] - public virtual Task> GetPageLookupAsync([FromQuery]PageLookupInputDto input) + public virtual Task> GetPageLookupAsync(PageLookupInputDto input) { - return MenuAdminAppService.GetPageLookupAsync(input); + return MenuItemAdminAppService.GetPageLookupAsync(input); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs index 920e35f414..40e852f42d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs @@ -70,8 +70,8 @@ namespace Volo.CmsKit.Admin.Web options.Conventions.AuthorizeFolder("/CmsKit/Comments/", CmsKitAdminPermissions.Comments.Default); options.Conventions.AuthorizeFolder("/CmsKit/Comments/Details", CmsKitAdminPermissions.Comments.Default); options.Conventions.AuthorizeFolder("/CmsKit/Menus", CmsKitAdminPermissions.Menus.Default); - options.Conventions.AuthorizePage("/CmsKit/Menus/CreateModal", CmsKitAdminPermissions.Menus.Create); - options.Conventions.AuthorizePage("/CmsKit/Menus/UpdateModal", CmsKitAdminPermissions.Menus.Update); + options.Conventions.AuthorizePage("/CmsKit/Menus/MenuItems/CreateModal", CmsKitAdminPermissions.Menus.Create); + options.Conventions.AuthorizePage("/CmsKit/Menus/MenuItems/UpdateModal", CmsKitAdminPermissions.Menus.Update); options.Conventions.AuthorizeFolder("/CmsKit/Menus/MenuItems", CmsKitAdminPermissions.Menus.Update); }); @@ -87,8 +87,7 @@ namespace Volo.CmsKit.Admin.Web options.Conventions.AddPageRoute("/CmsKit/BlogPosts/Update", "/Cms/BlogPosts/Update/{Id}"); options.Conventions.AddPageRoute("/CmsKit/Comments/Index", "/Cms/Comments"); options.Conventions.AddPageRoute("/CmsKit/Comments/Details", "/Cms/Comments/{Id}"); - options.Conventions.AddPageRoute("/CmsKit/Menus/Index", "/Cms/Menus"); - options.Conventions.AddPageRoute("/CmsKit/Menus/MenuItems/Index", "/Cms/Menus/{Id}/menu-items"); + options.Conventions.AddPageRoute("/CmsKit/Menus/MenuItems/Index", "/Cms/Menus/Items"); }); Configure(options => @@ -141,18 +140,6 @@ namespace Volo.CmsKit.Admin.Web ); }); - options.Configure( - toolbar => - { - toolbar.AddButton( - LocalizableString.Create("NewMenu"), - icon: "plus", - name: "CreateMenu", - id: "CreateMenu", - requiredPolicyName: CmsKitAdminPermissions.Menus.Create - ); - }); - options.Configure( toolbar => { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs index 866123b8cd..43d4b823d0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs @@ -74,8 +74,8 @@ namespace Volo.CmsKit.Admin.Web.Menus cmsMenus.Add(new ApplicationMenuItem( CmsKitAdminMenus.Menus.MenusMenu, l["Menus"], - "/Cms/Menus", - "fa fa-bars") + "/Cms/Menus/Items", + "fa fa-stream") .RequireGlobalFeatures(typeof(MenuFeature)) .RequirePermissions(CmsKitAdminPermissions.Menus.Default)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml deleted file mode 100644 index 3b4d361b31..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml +++ /dev/null @@ -1,23 +0,0 @@ -@page - -@using Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -@using Volo.CmsKit.Admin.Web.Pages -@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal - -@inherits CmsKitAdminPageBase - -@model CreateModalModel - -@{ - Layout = null; -} - - - - - - - - - - \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml.cs deleted file mode 100644 index b061da390f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml.cs +++ /dev/null @@ -1,44 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Validation; -using Volo.CmsKit.Admin.Menus; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -{ - public class CreateModalModel : CmsKitAdminPageModel - { - protected IMenuAdminAppService MenuAdminAppService { get; } - - [BindProperty] - public CreateMenuViewModel ViewModel { get; set; } - - public CreateModalModel(IMenuAdminAppService menuAdminAppService) - { - MenuAdminAppService = menuAdminAppService; - } - - public async Task OnPostAsync() - { - var input = ObjectMapper.Map(ViewModel); - - await MenuAdminAppService.CreateAsync(input); - - return NoContent(); - } - - [AutoMap(typeof(MenuCreateInput), ReverseMap = true)] - public class CreateMenuViewModel - { - [Required] - [DynamicMaxLength(typeof(MenuConsts), nameof(MenuConsts.MaxNameLength))] - public string Name { get; set; } - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml deleted file mode 100644 index b7fb652f2c..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml +++ /dev/null @@ -1,34 +0,0 @@ -@page - -@using Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -@using Volo.CmsKit.Admin.Web.Pages -@using Volo.CmsKit.Admin.Web.Menus -@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar - -@inherits CmsKitAdminPageBase - -@model IndexModel - -@{ - PageLayout.Content.Title = L["Menus"].Value; - PageLayout.Content.BreadCrumb.Add(L["Menu:CMS"].Value); - PageLayout.Content.MenuItemName = CmsKitAdminMenus.Menus.MenusMenu; -} - -@section scripts { - - - -} - -@section content_toolbar { - @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new { pageName = typeof(IndexModel).FullName }) -} - -
- - - - - -
\ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml.cs deleted file mode 100644 index e03f3f6f91..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -{ - public class IndexModel - { - - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml index 4d24c4b7fb..62d3504933 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml @@ -34,7 +34,6 @@
- diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs index 15d80ecf65..063c35638c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs @@ -13,20 +13,19 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { public class CreateModalModel : CmsKitAdminPageModel { - protected IMenuAdminAppService MenuAdminAppService { get; } + protected IMenuItemAdminAppService MenuAdminAppService { get; } [BindProperty] public MenuItemCreateViewModel ViewModel { get; set; } - public CreateModalModel(IMenuAdminAppService menuAdminAppService) + public CreateModalModel(IMenuItemAdminAppService menuAdminAppService) { MenuAdminAppService = menuAdminAppService; ViewModel = new MenuItemCreateViewModel(); } - public virtual Task OnGetAsync(Guid menuId, Guid? parentId) + public virtual Task OnGetAsync(Guid? parentId) { - ViewModel.MenuId = menuId; ViewModel.ParentId = parentId; return Task.CompletedTask; @@ -36,7 +35,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { var input = ObjectMapper.Map(ViewModel); - var dto = await MenuAdminAppService.CreateMenuItemAsync(ViewModel.MenuId, input); + var dto = await MenuAdminAppService.CreateAsync(input); return new OkObjectResult(dto); } @@ -44,9 +43,6 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems [AutoMap(typeof(MenuItemCreateInput), ReverseMap = true)] public class MenuItemCreateViewModel { - [HiddenInput] - public Guid MenuId { get; set; } - [HiddenInput] public Guid? ParentId { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml index 8203c2a383..e21b2693da 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml @@ -11,9 +11,8 @@ @model IndexModel @{ - PageLayout.Content.Title = @Model.Menu.Name + " - " + L["MenuItems"].Value; + PageLayout.Content.Title = L["MenuItems"].Value; PageLayout.Content.BreadCrumb.Add(L["Menu:CMS"].Value); - PageLayout.Content.BreadCrumb.Add(L["Menus"].Value, "/Cms/Menus"); PageLayout.Content.MenuItemName = CmsKitAdminMenus.Menus.MenusMenu; } @@ -37,11 +36,11 @@ @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new {pageName = typeof(IndexModel).FullName}) } -
+
- @Model.Menu.Name + @L["MenuItems"].Value diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs index 6f45ab7822..380d88a945 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs @@ -11,21 +11,5 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { public class IndexModel : CmsKitAdminPageModel { - protected IMenuAdminAppService MenuAdminAppService { get; } - - [BindProperty(SupportsGet = true)] - public Guid Id { get; set; } - - public MenuWithDetailsDto Menu { get; protected set; } - - public IndexModel(IMenuAdminAppService menuAdminAppService) - { - MenuAdminAppService = menuAdminAppService; - } - - public async Task OnGetAsync() - { - Menu = await MenuAdminAppService.GetAsync(Id); - } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml index 8709c0a481..e556e72f1f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -16,7 +16,6 @@ - diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs index 20d116967e..a696c6bef1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs @@ -11,27 +11,23 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { public class UpdateModalModel : CmsKitAdminPageModel { - protected IMenuAdminAppService MenuAdminAppService { get; } + protected IMenuItemAdminAppService MenuAdminAppService { get; } [BindProperty] public MenuItemUpdateViewModel ViewModel { get; set; } - [HiddenInput] - [BindProperty(SupportsGet = true)] - public Guid MenuId { get; set; } - [HiddenInput] [BindProperty(SupportsGet = true)] public Guid Id { get; set; } - public UpdateModalModel(IMenuAdminAppService menuAdminAppService) + public UpdateModalModel(IMenuItemAdminAppService menuAdminAppService) { MenuAdminAppService = menuAdminAppService; } public async Task OnGetAsync() { - var menuItemDto = await MenuAdminAppService.GetMenuItemAsync(MenuId, Id); + var menuItemDto = await MenuAdminAppService.GetAsync(Id); ViewModel = ObjectMapper.Map(menuItemDto); } @@ -40,7 +36,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { var input = ObjectMapper.Map(ViewModel); - var result = await MenuAdminAppService.UpdateMenuItemAsync(MenuId, Id, input); + var result = await MenuAdminAppService.UpdateAsync(Id, input); return new OkObjectResult(result); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js index a0db03cf52..41e37a0118 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js @@ -28,7 +28,7 @@ $(function () { }) function initSelectPageId() { - $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menus/lookup/pages'); + $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menu-items/lookup/pages'); $pageId.data('autocompleteDisplayProperty', 'title'); $pageId.data('autocompleteValueProperty', 'id'); $pageId.data('autocompleteItemsProperty', 'items'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js index fdfc717167..cd8f840eb5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js @@ -2,8 +2,6 @@ $(function () { var l = abp.localization.getResource("CmsKit"); - var menuId = $('#CmsKitMenuItemsWrapper').data('menu-id'); - var menuService = volo.cmsKit.admin.menus.menuAdmin; var createModal = new abp.ModalManager({ viewUrl: abp.appPath + 'CmsKit/Menus/MenuItems/CreateModal', modalClass: 'createMenuItem' }); @@ -96,8 +94,7 @@ $(function () { var instance = $.jstree.reference(data.reference); updateModal.open({ - id: node.id, - menuId: menuId + id: node.id }) } }, @@ -124,7 +121,7 @@ $(function () { function (isConfirmed) { if (isConfirmed) { menuService - .deleteMenuItem(menuId, node.id) + .delete(node.id) .done(function () { instance.delete_node(node); menuTree.refreshItemCount(); @@ -147,7 +144,6 @@ $(function () { var instance = $.jstree.reference(menuTree.$tree); createModal.open({ - menuId: menuId, parentId: parentId, }, function (newMenuItem) { instance.create_node( @@ -182,7 +178,7 @@ $(function () { }, getTreeDataFromServer: function (callback) { - menuService.get(menuId).done(function (result) { + menuService.getList().done(function (result) { var treeData = _.map(result.items, function (item) { return { id: item.id, @@ -233,7 +229,7 @@ $(function () { function (isConfirmed) { if (isConfirmed) { menuService - .moveMenuItem(menuId, data.node.id, { + .moveMenuItem(data.node.id, { newParentId: data.parent === '#' ? null : data.parent, position: data.position }) @@ -285,7 +281,7 @@ $(function () { $('button[name=CreateMenuItem]').click(function (e) { e.preventDefault(); - createModal.open({menuId: menuId}); + createModal.open(); }); createModal.onResult(function () { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js index 6cbe242123..e219763fc0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js @@ -29,7 +29,7 @@ $(function () { }); function initSelectPageId() { - $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menus/lookup/pages'); + $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menu-items/lookup/pages'); $pageId.data('autocompleteDisplayProperty', 'title'); $pageId.data('autocompleteValueProperty', 'id'); $pageId.data('autocompleteItemsProperty', 'items'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml deleted file mode 100644 index 855f12f21d..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml +++ /dev/null @@ -1,23 +0,0 @@ -@page -@using Volo.CmsKit.Admin.Web.Pages -@using Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal - -@inherits CmsKitAdminPageBase - -@model UpdateModalModel - -@{ - Layout = null; -} - - - - - - - - - - - \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs deleted file mode 100644 index 8310e44e1d..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs +++ /dev/null @@ -1,53 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Mvc; -using System; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Volo.Abp.Validation; -using Volo.CmsKit.Admin.Menus; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -{ - public class UpdateModalModel : CmsKitAdminPageModel - { - protected IMenuAdminAppService MenuAdminAppService { get; } - - [HiddenInput] - [BindProperty(SupportsGet = true)] - public Guid Id { get; set; } - - [BindProperty] - public UpdateMenuViewModel ViewModel { get; set; } - - public UpdateModalModel(IMenuAdminAppService menuAdminAppService) - { - MenuAdminAppService = menuAdminAppService; - } - - public async Task OnGetAsync() - { - var menu = await MenuAdminAppService.GetAsync(Id); - - ViewModel = ObjectMapper.Map(menu); - } - - public async Task OnPostAsync() - { - var input = ObjectMapper.Map(ViewModel); - - await MenuAdminAppService.UpdateAsync(Id, input); - - return NoContent(); - } - - [AutoMap(typeof(MenuWithDetailsDto))] - [AutoMap(typeof(MenuUpdateInput), ReverseMap = true)] - public class UpdateMenuViewModel - { - [Required] - [DynamicMaxLength(typeof(MenuConsts), nameof(MenuConsts.MaxNameLength))] - public string Name { get; set; } - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/createModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/createModal.js deleted file mode 100644 index 5f282702bb..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/createModal.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js deleted file mode 100644 index 7b4e6d7556..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js +++ /dev/null @@ -1,118 +0,0 @@ -$(function () { - var l = abp.localization.getResource("CmsKit"); - - var createModal = new abp.ModalManager(abp.appPath + "CmsKit/Menus/CreateModal"); - var updateModal = new abp.ModalManager(abp.appPath + "CmsKit/Menus/UpdateModal"); - - var menusService = volo.cmsKit.admin.menus.menuAdmin; - - var dataTable = $("#MenusTable").DataTable(abp.libs.datatables.normalizeConfiguration({ - processing: true, - serverSide: true, - paging: true, - searching: false, - scrollCollapse: true, - scrollX: true, - ordering: true, - order: [[1, "desc"]], - ajax: abp.libs.datatables.createAjax(menusService.getList), - columnDefs: [ - { - title: l("Details"), - targets: 0, - rowAction: { - items: [ - { - text: l('MenuItems'), - visible: abp.auth.isGranted('CmsKit.Menus.Update'), - action: function (data) { - location.href = "/Cms/Menus/" + data.record.id + "/menu-items" - } - }, - { - text: l('MakeMainMenu'), - visible: function (data) { - return abp.auth.isGranted('CmsKit.Menus.Update') && !data.isMainMenu - }, - action: function (data) { - menusService - .updateMainMenu(data.record.id, {isMainMenu: true}) - .then(function () { - dataTable.ajax.reload(); - }); - } - }, - { - text: l('UnMakeMainMenu'), - visible: function (data) { - return abp.auth.isGranted('CmsKit.Menus.Update') && data.isMainMenu - }, - action: function (data) { - menusService - .updateMainMenu(data.record.id, {isMainMenu: false}) - .then(function () { - dataTable.ajax.reload(); - }); - } - }, - { - text: l('Edit'), - visible: abp.auth.isGranted('CmsKit.Menus.Update'), - action: function (data) { - updateModal.open({id: data.record.id}); - } - }, - { - text: l('Delete'), - visible: abp.auth.isGranted('CmsKit.Menus.Delete'), - confirmMessage: function (data) { - return l("MenuDeletionConfirmationMessage", data.record.name) - }, - action: function (data) { - menusService - .delete(data.record.id) - .then(function () { - dataTable.ajax.reload(); - }); - } - } - ] - } - }, - { - title: l("Name"), - orderable: true, - data: "name", - render: function (data, val, record) { - - if (record.isMainMenu) { - return ( - data - + - '' - + - l("MainMenu") - + - '' - ); - } else { - return data; - } - } - } - ] - })); - - $('#AbpContentToolbar button[name=CreateMenu]').on('click', function (e) { - e.preventDefault(); - createModal.open(); - }); - - createModal.onResult(function () { - dataTable.ajax.reload(); - }); - - updateModal.onResult(function () { - dataTable.ajax.reload(); - }); -}); \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/updateModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/updateModal.js deleted file mode 100644 index 5f282702bb..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/updateModal.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs index 633b9af1a4..374229ab48 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs @@ -7,7 +7,6 @@ namespace Volo.CmsKit.Menus [Serializable] public class MenuItemDto : AuditedEntityDto { - public Guid MenuId { get; set; } public Guid? ParentId { get; set; } public string DisplayName { get; set; } public bool IsActive { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs deleted file mode 100644 index 5a28bb22e6..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; - -namespace Volo.CmsKit.Menus -{ - [Serializable] - public class MenuWithDetailsDto : FullAuditedEntityDto - { - public string Name { get; set; } - - - public bool IsMainMenu { get; set; } - - public List Items { get; set; } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs index 1bef58fd9d..a0c55ca641 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; @@ -7,23 +8,29 @@ using Volo.Abp.EventBus; namespace Volo.CmsKit.Menus { public class MenuChangedHandler : - ILocalEventHandler>, - ILocalEventHandler>, + ILocalEventHandler>, + ILocalEventHandler>, + ILocalEventHandler>, ITransientDependency { - protected IDistributedCache DistributedCache { get; } + protected IDistributedCache> DistributedCache { get; } - public MenuChangedHandler(IDistributedCache distributedCache) + public MenuChangedHandler(IDistributedCache> distributedCache) { DistributedCache = distributedCache; } - public Task HandleEventAsync(EntityUpdatedEventData eventData) + public Task HandleEventAsync(EntityUpdatedEventData eventData) { return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey); } - public Task HandleEventAsync(EntityDeletedEventData eventData) + public Task HandleEventAsync(EntityDeletedEventData eventData) + { + return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey); + } + + public Task HandleEventAsync(EntityCreatedEventData eventData) { return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs new file mode 100644 index 0000000000..9c46bab982 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs @@ -0,0 +1,9 @@ +using System; +using Volo.Abp.Domain.Repositories; + +namespace Volo.CmsKit.Menus +{ + public interface IMenuItemRepository : IBasicRepository + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs deleted file mode 100644 index ec8efa5d80..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Domain.Repositories; - -namespace Volo.CmsKit.Menus -{ - public interface IMenuRepository : IBasicRepository - { - Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default); - - Task> GetCurrentAndNextMainMenusAsync( - Guid nextMainMenuId, - bool includeDetails = true, - CancellationToken cancellationToken = default); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs deleted file mode 100644 index ec91bc04f6..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs +++ /dev/null @@ -1,33 +0,0 @@ -using JetBrains.Annotations; -using System; -using System.Collections; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Domain.Entities.Auditing; -using Volo.Abp.MultiTenancy; - -namespace Volo.CmsKit.Menus -{ - public class Menu : FullAuditedAggregateRoot, IMultiTenant - { - public string Name { get; protected set; } - - public bool IsMainMenu { get; internal set; } - - public Guid? TenantId { get; protected set; } - - public ICollection Items { get; protected set; } - - internal Menu(Guid id, Guid? tenantId, [NotNull] string name) : base(id) - { - TenantId = tenantId; - SetName(name); - Items = new HashSet(); - } - - public void SetName([NotNull] string name) - { - Name = Check.NotNullOrEmpty(name, nameof(name), MenuConsts.MaxNameLength); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs index f8bb18e923..0ff1ad7bfa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs @@ -7,16 +7,12 @@ using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; namespace Volo.CmsKit.Menus { - public class MenuItem : AuditedEntity + public class MenuItem : AuditedAggregateRoot, IMultiTenant { - /// - /// Parent Id. - /// - public Guid MenuId { get; set; } - /// /// Presents another Id. /// If it's , then it's a root menu item. @@ -43,9 +39,9 @@ namespace Volo.CmsKit.Menus public Guid? PageId { get; protected set; } + public Guid? TenantId { get; } public MenuItem(Guid id, - Guid menuId, [NotNull] string displayName, [NotNull] string url, bool isActive = true, @@ -57,7 +53,6 @@ namespace Volo.CmsKit.Menus [CanBeNull] string cssClass = null) :base(id) { - MenuId = menuId; SetDisplayName(displayName); IsActive = isActive; ParentId = parentId; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs new file mode 100644 index 0000000000..542f6f6259 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs @@ -0,0 +1,63 @@ +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Uow; +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.Menus +{ + public class MenuItemManager : CmsKitDomainServiceBase + { + protected IMenuItemRepository MenuItemRepository { get; } + + public MenuItemManager(IMenuItemRepository menuRepository) + { + MenuItemRepository = menuRepository; + } + + public virtual void SetPageUrl(MenuItem menuItem, Page page) + { + menuItem.SetPageId(page.Id); + menuItem.SetUrl(PageConsts.UrlPrefix + page.Slug); + } + + [UnitOfWork] + public virtual async Task MoveAsync(Guid menuItemId, Guid? newParentMenuItemId, int position = 0) + { + var menuItems = await MenuItemRepository.GetListAsync(); + + var movedMenuItem = menuItems.FirstOrDefault(x => x.Id == menuItemId) + ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); + + if (newParentMenuItemId.HasValue && !menuItems.Any(a => a.Id == newParentMenuItemId.Value)) + { + throw new EntityNotFoundException(typeof(MenuItem), newParentMenuItemId); + } + + movedMenuItem.ParentId = newParentMenuItemId; + movedMenuItem.Order = position; + + OrganizeTreeOrderForMenuItem(menuItems, movedMenuItem); + + await MenuItemRepository.UpdateManyAsync(menuItems); + } + + public virtual void OrganizeTreeOrderForMenuItem(List items, MenuItem menuItem) + { + var sameTree = items.Where(x => x.ParentId == menuItem.ParentId).OrderBy(x => x.Order).ToList(); + + sameTree.Remove(menuItem); // Remove if exists to prevent misordering with same order number + + sameTree.Insert(menuItem.Order, menuItem); + + for (int i = 0; i < sameTree.Count; i++) + { + sameTree[i].Order = i; + } + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs deleted file mode 100644 index 7016afda49..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using JetBrains.Annotations; -using Volo.Abp; -using Volo.Abp.Domain.Entities; -using Volo.Abp.Domain.Services; -using Volo.Abp.Uow; -using Volo.CmsKit.Pages; - -namespace Volo.CmsKit.Menus -{ - public class MenuManager : CmsKitDomainServiceBase - { - protected IMenuRepository MenuRepository { get; } - - public MenuManager(IMenuRepository menuRepository) - { - MenuRepository = menuRepository; - } - - /// - /// Creates a new instance of without inserting into database. - /// - /// Tenant Id of Menu. - /// Name of Menu. - /// Created instance. - public virtual async Task CreateAsync(Guid? tenantId, [NotNull] string name) - { - var menu = new Menu( - GuidGenerator.Create(), - tenantId, - Check.NotNullOrEmpty(name, nameof(name), MenuConsts.MaxNameLength)); - - var existingMenuCount = await MenuRepository.GetCountAsync(); - - if (existingMenuCount == 0) - { - menu.IsMainMenu = true; - } - - return menu; - } - - public virtual void SetPageUrl(MenuItem menuItem, Page page) - { - menuItem.SetPageId(page.Id); - menuItem.SetUrl(PageConsts.UrlPrefix + page.Slug); - } - - [UnitOfWork] - public virtual async Task MoveAsync(Guid menuId, Guid menuItemId, Guid? newParentId, int position = 0) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: true); - - var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) - ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); - - if (newParentId.HasValue && !menu.Items.Any(a => a.Id == newParentId.Value)) - { - throw new EntityNotFoundException(typeof(MenuItem), newParentId); - } - - menuItem.ParentId = newParentId; - menuItem.Order = position; - - OrganizeTreeOrderForMenuItem(menu, menuItem); - - await MenuRepository.UpdateAsync(menu); - } - - public virtual void OrganizeTreeOrderForMenuItem(Menu menu, MenuItem menuItem) - { - var sameTree = menu.Items.Where(x => x.ParentId == menuItem.ParentId).OrderBy(x => x.Order).ToList(); - - sameTree.Remove(menuItem); // Remove if exists to prevent misordering with same order number - - sameTree.Insert(menuItem.Order, menuItem); - - for (int i = 0; i < sameTree.Count; i++) - { - sameTree[i].Order = i; - } - } - - public virtual async Task SetMainMenuAsync(Guid menuId) - { - var menus = await MenuRepository.GetCurrentAndNextMainMenusAsync(menuId ,includeDetails: false); - - foreach (var menu in menus) - { - menu.IsMainMenu = menuId == menu.Id; - } - - await MenuRepository.UpdateManyAsync(menus); - } - - public virtual async Task UnSetMainMenuAsync(Guid menuId) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: false); - - menu.IsMainMenu = false; - - await MenuRepository.UpdateAsync(menu); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs index 4c162ff01a..ba8ce0ad47 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs @@ -11,12 +11,12 @@ namespace Volo.CmsKit.Menus public class PageChangedHandler: ILocalEventHandler>, ITransientDependency { - protected IMenuRepository MenuRepository { get; } - protected MenuManager MenuManager { get; } + protected IMenuItemRepository MenuRepository { get; } + protected MenuItemManager MenuManager { get; } public PageChangedHandler( - IMenuRepository menuRepository, - MenuManager menuManager) + IMenuItemRepository menuRepository, + MenuItemManager menuManager) { MenuRepository = menuRepository; MenuManager = menuManager; @@ -25,21 +25,18 @@ namespace Volo.CmsKit.Menus public async Task HandleEventAsync(EntityUpdatedEventData eventData) { // TODO: Write a repository query. - var allMenus = await MenuRepository.GetListAsync(includeDetails: true); + var allMenuItems = await MenuRepository.GetListAsync(); - var affectedMenus = allMenus - .Where(menu => menu.Items.Any(x => x.PageId == eventData.Entity.Id)) - .ToArray(); - - var affectedMenuItems = - affectedMenus.SelectMany(sm => sm.Items).Where(mItem => mItem.PageId == eventData.Entity.Id); + var affectedMenuItems = allMenuItems + .Where(x => x.PageId == eventData.Entity.Id) + .ToArray(); foreach (var menuItem in affectedMenuItems) { MenuManager.SetPageUrl(menuItem, eventData.Entity); } - await MenuRepository.UpdateManyAsync(affectedMenus); + await MenuRepository.UpdateManyAsync(affectedMenuItems); } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs index 5d16417c47..752b47cdaa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs @@ -27,7 +27,6 @@ namespace Volo.CmsKit.EntityFrameworkCore public DbSet BlogPosts { get; set; } public DbSet BlogFeatures { get; set; } public DbSet MediaDescriptors { get; set; } - public DbSet Menus { get; set; } public DbSet MenuItems { get; set; } public CmsKitDbContext(DbContextOptions options) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index fc9a0e083a..f7964c1711 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -258,15 +258,6 @@ namespace Volo.CmsKit.EntityFrameworkCore if (GlobalFeatureManager.Instance.IsEnabled()) { - builder.Entity(b => - { - b.ToTable(options.TablePrefix + "Menus", options.Schema); - - b.ConfigureByConvention(); - - b.HasMany(x => x.Items).WithOne().HasForeignKey(fk => fk.MenuId); - }); - builder.Entity(b => { b.ToTable(options.TablePrefix + "MenuItems", options.Schema); @@ -280,7 +271,6 @@ namespace Volo.CmsKit.EntityFrameworkCore } else { - builder.Ignore(); builder.Ignore(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs index 0484676a94..09118a1d69 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs @@ -4,6 +4,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.MediaDescriptors; +using Volo.CmsKit.Menus; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -25,5 +26,6 @@ namespace Volo.CmsKit.EntityFrameworkCore DbSet Blogs { get; } DbSet BlogPosts { get; } DbSet MediaDescriptors { get; } + DbSet MenuItems { get; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs deleted file mode 100644 index bed9516c8f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Linq; -using Microsoft.EntityFrameworkCore; - -namespace Volo.CmsKit.Menus -{ - public static class EfCoreMenuExtensions - { - public static IQueryable IncludeDetails(this IQueryable source) - { - return source.Include(i => i.Items); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs new file mode 100644 index 0000000000..6b5a314c1e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Menus +{ + public class EfCoreMenuItemRepository : EfCoreRepository, IMenuItemRepository + { + public EfCoreMenuItemRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs deleted file mode 100644 index 5902c40a8d..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Domain.Repositories.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore; -using Volo.CmsKit.EntityFrameworkCore; - -namespace Volo.CmsKit.Menus -{ - public class EfCoreMenuRepository : EfCoreRepository, IMenuRepository - { - public EfCoreMenuRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) - { - } - - public override async Task> WithDetailsAsync() - { - return (await base.WithDetailsAsync()).IncludeDetails(); - } - - public virtual async Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default) - { - return await (includeDetails ? await WithDetailsAsync() : await GetQueryableAsync()) - .FirstOrDefaultAsync(x => x.IsMainMenu, GetCancellationToken(cancellationToken)); - } - - public virtual async Task> GetCurrentAndNextMainMenusAsync( - Guid nextMainMenuId, - bool includeDetails = true, - CancellationToken cancellationToken = default) - { - return await (includeDetails ? await WithDetailsAsync() : await GetQueryableAsync()) - .Where(x => x.IsMainMenu || x.Id == nextMainMenuId) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index 11d089f4e2..e970a3d48a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -39,7 +39,7 @@ namespace Volo.CmsKit.MongoDB public IMongoCollection MediaDescriptors => Collection(); - public IMongoCollection Menus => Collection(); + public IMongoCollection Menus => Collection(); protected override void CreateModel(IMongoModelBuilder modelBuilder) { diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index e96ed841a8..9ff9ff8797 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -4,6 +4,7 @@ using Volo.Abp.MongoDB; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.MediaDescriptors; +using Volo.CmsKit.Menus; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -80,6 +81,11 @@ namespace Volo.CmsKit.MongoDB { x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MediaDescriptors"; }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MenuItems"; + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs index f18e92e2ba..e3e9c32275 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs @@ -5,9 +5,11 @@ using Volo.Abp.Users.MongoDB; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.MediaDescriptors; +using Volo.CmsKit.Menus; using Volo.CmsKit.MongoDB.Blogs; using Volo.CmsKit.MongoDB.Comments; using Volo.CmsKit.MongoDB.MediaDescriptors; +using Volo.CmsKit.MongoDB.Menus; using Volo.CmsKit.MongoDB.Pages; using Volo.CmsKit.MongoDB.Ratings; using Volo.CmsKit.MongoDB.Reactions; @@ -42,6 +44,7 @@ namespace Volo.CmsKit.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index 564ae15536..853c522b11 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -39,6 +39,6 @@ namespace Volo.CmsKit.MongoDB IMongoCollection MediaDescriptors { get; } - IMongoCollection Menus { get; } + IMongoCollection Menus { get; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs new file mode 100644 index 0000000000..d68923572f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.MongoDB.Menus +{ + public class MongoMenuItemRepository : MongoDbRepository, IMenuItemRepository + { + public MongoMenuItemRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs deleted file mode 100644 index dd9f26a694..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using MongoDB.Driver; -using MongoDB.Driver.Linq; -using Volo.Abp.Domain.Repositories.MongoDB; -using Volo.Abp.MongoDB; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.MongoDB.Menus -{ - public class MongoMenuRepository : MongoDbRepository, IMenuRepository - { - public MongoMenuRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) - { - } - - public virtual async Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default) - { - return await (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken))) - .FirstOrDefaultAsync(x => x.IsMainMenu, GetCancellationToken(cancellationToken)); - } - - public virtual async Task> GetCurrentAndNextMainMenusAsync(Guid nextMainMenuId, bool includeDetails = true, - CancellationToken cancellationToken = default) - { - return await (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken))) - .Where(x => x.IsMainMenu || x.Id == nextMainMenuId) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs new file mode 100644 index 0000000000..6875a4049c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.Public.Menus +{ + public interface IMenuItemPublicAppService : IApplicationService + { + Task> GetMenuItemsAsync(); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuPublicAppService.cs deleted file mode 100644 index ee544f5505..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuPublicAppService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Public.Menus -{ - public interface IMenuPublicAppService : IApplicationService - { - Task GetMainMenuAsync(); - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs new file mode 100644 index 0000000000..aa9ec36673 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Caching; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.Public.Menus +{ + [RequiresGlobalFeature(typeof(MenuFeature))] + public class MenuItemPublicAppService : CmsKitPublicAppServiceBase, IMenuItemPublicAppService + { + protected IMenuItemRepository MenuItemRepository { get; } + protected IDistributedCache> DistributedCache { get; } + + public MenuItemPublicAppService( + IMenuItemRepository menuRepository, + IDistributedCache> distributedCache) + { + MenuItemRepository = menuRepository; + DistributedCache = distributedCache; + } + + public async Task> GetMenuItemsAsync() + { + var cachedMenu = await DistributedCache.GetOrAddAsync( + MenuApplicationConsts.MainMenuCacheKey, + async () => + { + var menuItems = await MenuItemRepository.GetListAsync(); + + if (menuItems == null) + { + return new(); + } + + return ObjectMapper.Map, List>(menuItems); + }); + + return cachedMenu; + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs deleted file mode 100644 index 891aec1e76..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.Caching; -using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.GlobalFeatures; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Public.Menus -{ - [RequiresGlobalFeature(typeof(MenuFeature))] - public class MenuPublicAppService : CmsKitPublicAppServiceBase, IMenuPublicAppService - { - protected IMenuRepository MenuRepository { get; } - - protected IDistributedCache DistributedCache { get; } - - public MenuPublicAppService( - IMenuRepository menuRepository, - IDistributedCache distributedCache) - { - MenuRepository = menuRepository; - DistributedCache = distributedCache; - } - - public async Task GetMainMenuAsync() - { - var cachedMenu = await DistributedCache.GetOrAddAsync( - MenuApplicationConsts.MainMenuCacheKey, - async () => - { - var menu = await MenuRepository.FindMainMenuAsync(includeDetails: true); - - if (menu == null) - { - return new MenuWithDetailsDto(); - } - - return ObjectMapper.Map(menu); - }); - - return cachedMenu; - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index 72a9dae9b2..72ab7bebdc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -33,8 +33,6 @@ namespace Volo.CmsKit.Public CreateMap(MemberList.None); CreateMap(); - - CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs similarity index 51% rename from modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuPublicController.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs index 14d4c621ed..dc95e655c2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; @@ -10,21 +11,20 @@ namespace Volo.CmsKit.Public.Menus [RequiresGlobalFeature(typeof(BlogsFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] - [Route("api/cms-kit-public/menus")] - public class MenuPublicController : CmsKitPublicControllerBase, IMenuPublicAppService + [Route("api/cms-kit-public/menus/items")] + public class MenuItemPublicController : CmsKitPublicControllerBase, IMenuItemPublicAppService { - protected IMenuPublicAppService MenuPublicAppService { get; } + protected IMenuItemPublicAppService MenuPublicAppService { get; } - public MenuPublicController(IMenuPublicAppService menuPublicAppService) + public MenuItemPublicController(IMenuItemPublicAppService menuPublicAppService) { MenuPublicAppService = menuPublicAppService; } - [Route("main-menu")] [HttpGet] - public Task GetMainMenuAsync() + public Task> GetMenuItemsAsync() { - return MenuPublicAppService.GetMainMenuAsync(); + return MenuPublicAppService.GetMenuItemsAsync(); } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs index 64f7a581c0..e29c717380 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs @@ -24,15 +24,15 @@ namespace Volo.CmsKit.Public.Web.Menus { if (GlobalFeatureManager.Instance.IsEnabled()) { - var menuAppService = context.ServiceProvider.GetRequiredService(); + var menuAppService = context.ServiceProvider.GetRequiredService(); - var mainMenu = await menuAppService.GetMainMenuAsync(); + var menuItems = await menuAppService.GetMenuItemsAsync(); - if (mainMenu != null) + if (!menuItems.IsNullOrEmpty()) { - foreach (var menuItemDto in mainMenu.Items.Where(x => x.ParentId == null && x.IsActive)) + foreach (var menuItemDto in menuItems.Where(x => x.ParentId == null && x.IsActive)) { - AddChildItems(menuItemDto, mainMenu.Items, context.Menu); + AddChildItems(menuItemDto, menuItems, context.Menu); } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuAdminAppService_Tests.cs index e82a791644..393bd42a87 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuAdminAppService_Tests.cs @@ -13,15 +13,15 @@ namespace Volo.CmsKit.Menus { public class MenuAdminAppService_Tests : CmsKitApplicationTestBase { - protected IMenuAdminAppService MenuAdminAppService { get; } + protected IMenuItemAdminAppService MenuAdminAppService { get; } protected CmsKitTestData TestData { get; } - protected IMenuRepository MenuRepository { get; } + protected IMenuItemRepository MenuRepository { get; } public MenuAdminAppService_Tests() { - MenuAdminAppService = GetRequiredService(); + MenuAdminAppService = GetRequiredService(); TestData = GetRequiredService(); - MenuRepository = GetRequiredService(); + MenuRepository = GetRequiredService(); } [Fact] diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs index 88ae0c8458..c40dab0118 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs @@ -1,8 +1,7 @@ +using Shouldly; using System; using System.Linq; using System.Threading.Tasks; -using Nito.AsyncEx; -using Shouldly; using Volo.CmsKit.Pages; using Xunit; @@ -10,16 +9,16 @@ namespace Volo.CmsKit.Menus { public class MenuManager_Test : CmsKitDomainTestBase { - private readonly MenuManager menuManager; + private readonly MenuItemManager menuManager; private readonly CmsKitTestData testData; - private readonly IMenuRepository menuRepository; + private readonly IMenuItemRepository menuItemRepository; private readonly IPageRepository pageRepository; public MenuManager_Test() { - menuManager = GetRequiredService(); + menuManager = GetRequiredService(); testData = GetRequiredService(); - menuRepository = GetRequiredService(); + menuItemRepository = GetRequiredService(); pageRepository = GetRequiredService(); } @@ -27,8 +26,8 @@ namespace Volo.CmsKit.Menus public async Task SetPageUrl_ShouldSetUrlSameWithPage_WithExistingPage() { var page = await pageRepository.GetAsync(testData.Page_1_Id); - var menu = await menuRepository.GetAsync(testData.Menu_1_Id); - var menuItem = menu.Items.First(); + + var menuItem = await menuItemRepository.GetAsync(testData.MenuItem_1_Id); menuManager.SetPageUrl(menuItem, page); @@ -39,24 +38,22 @@ namespace Volo.CmsKit.Menus [Fact] public async Task MoveAsync_ShouldMoveCorrectly_UnderAnotherMenu() { - await menuManager.MoveAsync(testData.Menu_1_Id, testData.MenuItem_2_Id, testData.MenuItem_1_Id); + await menuManager.MoveAsync(testData.MenuItem_3_Id, testData.MenuItem_1_Id); - var menu = await menuRepository.GetAsync(testData.Menu_1_Id); + var menu = await menuItemRepository.GetAsync(testData.MenuItem_3_Id); - menu.Items.ShouldContain( - x => x.ParentId == testData.MenuItem_1_Id - && x.Id == testData.MenuItem_2_Id); + menu.ParentId.ShouldBe(testData.MenuItem_1_Id); } [Fact] - public async Task MoveAsync_ShouldChangePositionCorrectly_UnderSameParent() + public async Task MoveAsync_ShouldChangePositionCorrectly_UnderRoot() { - await menuManager.MoveAsync(testData.Menu_1_Id, testData.MenuItem_2_Id, null, 0); + await menuManager.MoveAsync(testData.MenuItem_2_Id, null, 0); - var menu = await menuRepository.GetAsync(testData.Menu_1_Id); + var menuItems = await menuItemRepository.GetListAsync(); - var menuItem1 = menu.Items.First(x => x.Id == testData.MenuItem_1_Id); - var menuItem2 = menu.Items.First(x => x.Id == testData.MenuItem_2_Id); + var menuItem1 = menuItems.First(x => x.Id == testData.MenuItem_1_Id); + var menuItem2 = menuItems.First(x => x.Id == testData.MenuItem_2_Id); menuItem1.Order.ShouldBeGreaterThan(menuItem2.Order); } @@ -65,45 +62,21 @@ namespace Volo.CmsKit.Menus public async Task OrganizeTreeOrderForMenuItem_ShouldWorkProperly_WithNewMenuItem() { var menu3Id = Guid.NewGuid(); - var menu = await menuRepository.GetAsync(testData.Menu_1_Id); - var menuItem1 = menu.Items.First(x => x.Id == testData.MenuItem_1_Id); - var menuItem2 = menu.Items.First(x => x.Id == testData.MenuItem_2_Id); - var menuItem3 = new MenuItem(menu3Id, menu.Id, "Menu 3", "#"); - menu.Items.Add(menuItem3); + var menuItems = await menuItemRepository.GetListAsync(); + + var menuItem1 = menuItems.First(x => x.Id == testData.MenuItem_1_Id); + var menuItem2 = menuItems.First(x => x.Id == testData.MenuItem_2_Id); + var menuItem3 = new MenuItem(menu3Id, "Menu 3", "#"); + + menuItems.Add(menuItem3); menuItem3.Order = 0; - menuManager.OrganizeTreeOrderForMenuItem(menu, menuItem3); + menuManager.OrganizeTreeOrderForMenuItem(menuItems, menuItem3); menuItem3.Order.ShouldBeLessThan(menuItem1.Order); menuItem3.Order.ShouldBeLessThan(menuItem2.Order); } - - [Fact] - public async Task SetMainMenuAsync_ShouldSetOnlyOneMainMenu() - { - await menuManager.SetMainMenuAsync(testData.Menu_2_Id); - - var menuList = await menuRepository.GetListAsync(); - - var isMainMenuTrueCount = menuList.Count(menu => menu.IsMainMenu); - - isMainMenuTrueCount.ShouldBe(1); - menuList.ShouldContain(menu => menu.IsMainMenu && menu.Id == testData.Menu_2_Id); - } - - [Fact] - public async Task UnSetMainMenuAsync_ShouldUnsetProperly() - { - await menuManager.UnSetMainMenuAsync(testData.Menu_1_Id); - - var menuList = await menuRepository.GetListAsync(); - - var isMainMenuTrueCount = menuList.Count(menu => menu.IsMainMenu); - - isMainMenuTrueCount.ShouldBe(0); - menuList.ShouldNotContain(menu => menu.IsMainMenu && menu.Id == testData.Menu_1_Id); - } } } \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs index f4ba77618c..9f0cf3db69 100644 --- a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs @@ -2,7 +2,7 @@ using Volo.CmsKit.Menus; namespace Volo.CmsKit.EntityFrameworkCore.Menus { - public class MenuRepository_Test : MenuRepository_Test + public class MenuRepository_Test : MenuItemRepository_Test { } diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs index 8daf56f569..61f46dc8fc 100644 --- a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs @@ -4,7 +4,7 @@ using Volo.CmsKit.Menus; namespace Volo.CmsKit.MongoDB.Menus { [Collection(MongoTestCollection.Name)] - public class MenuRepository_Test : MenuRepository_Test + public class MenuRepository_Test : MenuItemRepository_Test { } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index e18d573f0d..9383265019 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -1,5 +1,4 @@ using Microsoft.Extensions.Options; -using System; using System.Collections.Generic; using System.IO; using System.Text; @@ -48,7 +47,7 @@ namespace Volo.CmsKit private readonly IOptions _mediaOptions; private readonly IOptions _commentsOptions; private readonly IOptions _ratingOptions; - private readonly IMenuRepository _menuRepository; + private readonly IMenuItemRepository _menuItemRepository; public CmsKitDataSeedContributor( IGuidGenerator guidGenerator, @@ -75,7 +74,7 @@ namespace Volo.CmsKit IOptions cmsMediaOptions, IOptions commentsOptions, IOptions ratingOptions, - IMenuRepository menuRepository) + IMenuItemRepository menuItemRepository) { _guidGenerator = guidGenerator; _cmsUserRepository = cmsUserRepository; @@ -101,7 +100,7 @@ namespace Volo.CmsKit _mediaOptions = cmsMediaOptions; _commentsOptions = commentsOptions; _ratingOptions = ratingOptions; - _menuRepository = menuRepository; + _menuItemRepository = menuItemRepository; } public async Task SeedAsync(DataSeedContext context) @@ -415,38 +414,22 @@ namespace Volo.CmsKit private async Task SeedMenusAsync() { - var menu = new Menu(_cmsKitTestData.Menu_1_Id, null, _cmsKitTestData.Menu_1_Name); - menu.IsMainMenu = true; - - menu.Items.Add( + await _menuItemRepository.InsertManyAsync(new[] + { new MenuItem( _cmsKitTestData.MenuItem_1_Id, - menu.Id, _cmsKitTestData.MenuItem_1_Name, - _cmsKitTestData.MenuItem_1_Url)); - - menu.Items.Add( + _cmsKitTestData.MenuItem_1_Url), new MenuItem( _cmsKitTestData.MenuItem_2_Id, - menu.Id, _cmsKitTestData.MenuItem_2_Name, - _cmsKitTestData.MenuItem_2_Url)); - - await _menuRepository.InsertAsync(menu); - - var menu2 = new Menu( - _cmsKitTestData.Menu_2_Id, - null, - _cmsKitTestData.Menu_2_Name); - - menu2.Items.Add( + _cmsKitTestData.MenuItem_2_Url), new MenuItem( - _cmsKitTestData.MenuItem_3_Id, - menu2.Id, + _cmsKitTestData.MenuItem_3_Id, _cmsKitTestData.MenuItem_3_Name, - _cmsKitTestData.MenuItem_3_Url)); - - await _menuRepository.InsertAsync(menu2); + _cmsKitTestData.MenuItem_3_Url) + + }); } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index dfe88d8d0f..62f81b2646 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -110,10 +110,6 @@ namespace Volo.CmsKit public string Media_1_ContentType { get; } = "text/plain"; - public Guid Menu_1_Id { get; } = Guid.NewGuid(); - - public string Menu_1_Name { get; } = "MainMenu"; - public Guid MenuItem_1_Id { get; } = Guid.NewGuid(); public string MenuItem_1_Name { get; } = "About Us"; @@ -126,11 +122,6 @@ namespace Volo.CmsKit public string MenuItem_2_Url { get; } = "/team"; - - public Guid Menu_2_Id { get; } = Guid.NewGuid(); - - public string Menu_2_Name { get; } = "DraftMenu"; - public Guid MenuItem_3_Id { get; } = Guid.NewGuid(); public string MenuItem_3_Name { get; } = "Products"; diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuItemRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuItemRepository_Test.cs new file mode 100644 index 0000000000..7043a2bf6d --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuItemRepository_Test.cs @@ -0,0 +1,21 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Modularity; + +namespace Volo.CmsKit.Menus +{ + public abstract class MenuItemRepository_Test : CmsKitTestBase + where TStartupModule : IAbpModule + { + + private readonly CmsKitTestData testData; + private readonly IMenuItemRepository menuItemRepository; + + public MenuItemRepository_Test() + { + testData = GetRequiredService(); + menuItemRepository = GetRequiredService(); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs deleted file mode 100644 index d4f428b940..0000000000 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Threading.Tasks; -using Shouldly; -using Volo.Abp.Modularity; -using Xunit; - -namespace Volo.CmsKit.Menus -{ - public abstract class MenuRepository_Test : CmsKitTestBase - where TStartupModule : IAbpModule - { - - private readonly CmsKitTestData testData; - private readonly IMenuRepository menuRepository; - - public MenuRepository_Test() - { - testData = GetRequiredService(); - menuRepository = GetRequiredService(); - } - - [Fact] - public async Task GetMainMenuAsync_ShouldWorkProperly() - { - var mainMenu = await menuRepository.FindMainMenuAsync(); - - mainMenu.ShouldNotBeNull(); - mainMenu.Id.ShouldBe(testData.Menu_1_Id); - } - - [Fact] - public async Task GetMainMenuAsync_ShouldWorkProperly_WithIncludeDetails() - { - var mainMenu = await menuRepository.FindMainMenuAsync(includeDetails: true); - - mainMenu.ShouldNotBeNull(); - mainMenu.Id.ShouldBe(testData.Menu_1_Id); - mainMenu.Items.ShouldNotBeEmpty(); - mainMenu.Items.Count.ShouldBe(2); - } - - [Fact] - public async Task GetCurrentAndNextMainMenusAsync_ShouldWorkProperly() - { - var menus = await menuRepository.GetCurrentAndNextMainMenusAsync( - testData.Menu_2_Id); - - menus.ShouldNotBeEmpty(); - menus.Count.ShouldBe(2); - } - } -} \ No newline at end of file