using FlexJobApi.Core; using FlexJobApi.Core.Models; using Furion.DatabaseAccessor; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.User.Application.Menus.Queries { /// /// 查询按钮/字段列表 /// /// public class MenuSubListQueryHandler(IRepository menuRep) : IRequestHandler { private readonly IRepository menuRep = menuRep; /// public async Task Handle(MenuSubListQuery request, CancellationToken cancellationToken) { var callback = new MenuSubListCallback(); var q = menuRep.AsQueryable().AsNoTracking() .Where(it => it.ParentId == request.ParentId) .Where(it => it.Type == EnumMenuType.Button || it.Type == EnumMenuType.Field); var items = await q.ProjectToType().ToListAsync(cancellationToken); callback.Groups = items.GroupBy(it => it.Group ?? "Default") .Select(it => new MenuSubListCallbackGroup { Name = it.Key, Buttons = it.Where(g => g.Type == EnumMenuType.Button).ToList(), Fields = it.Where(g => g.Type == EnumMenuType.Field).ToList(), }) .ToList(); return callback; } } }