From 509f2b5d3ee9208ea6b86aae5d29194c654d67f5 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期三, 06 八月 2025 16:59:33 +0800 Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/ApiFlexJob --- FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs | 67 +++++++++++++++++++++++++++++++++ 1 files changed, 67 insertions(+), 0 deletions(-) diff --git a/FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs b/FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs new file mode 100644 index 0000000..b83b5a3 --- /dev/null +++ b/FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs @@ -0,0 +1,67 @@ +锘縰sing FlexJobApi.Core; +using Furion.DatabaseAccessor; +using Furion.FriendlyException; +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 +{ + /// <summary> + /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鑿滃崟璇︽儏 + /// </summary> + public class GetCurrentLogierMenuQueryHandler( + IRepository<Menu> repMenu, + IRepository<RoleMenu> repRoleMenu, + IRepository<UserInfoRole> repUserInfoRole + ) : IRequestHandler<GetCurrentLogierMenuQuery, GetMenuQueryResult> + { + private readonly IRepository<Menu> repMenu = repMenu; + private readonly IRepository<RoleMenu> repRoleMenu = repRoleMenu; + private readonly IRepository<UserInfoRole> repUserInfoRole = repUserInfoRole; + + /// <inheritdoc/> + public async Task<GetMenuQueryResult> Handle(GetCurrentLogierMenuQuery request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + var model = await repMenu.AsQueryable().AsNoTracking() + .Where(it => it.Id == request.Id) + .ProjectToType<GetMenuQueryResult>() + .FirstOrDefaultAsync(cancellationToken); + if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ヨ彍鍗�"); + var items = await (from m in repMenu.AsQueryable().AsNoTracking() + join rm in repRoleMenu.AsQueryable().AsNoTracking() on m.Id equals rm.MenuId + join ur in repUserInfoRole.AsQueryable().AsNoTracking() on rm.RoleId equals ur.RoleId + where m.ParentId == request.Id && ur.UserInfoId == logier.UserInfoId && !m.IsDisabled + && (m.Type == EnumMenuType.Button || m.Type == EnumMenuType.Field) + select m).ProjectToType<GetMenuQueryResultItem>().ToListAsync(cancellationToken); + model.Groups = items.GroupBy(it => it.Group ?? "default") + .Select(it => new GetMenuQueryResultGroup + { + Group = it.Key, + ButtonLocations = it + .Where(l => l.Type == EnumMenuType.Button) + .GroupBy(l => l.Location ?? "default") + .Select(l => new GetMenuQueryResultButtonLocation + { + Location = l.Key, + Buttons = l + .ToList() + .Adapt<List<GetMenuQueryResultButton>>() + }) + .ToList(), + Fields = it + .Where(f => f.Type == EnumMenuType.Field) + .ToList() + .Adapt<List<GetMenuQueryResultField>>() + }) + .ToList(); + return model; + } + } +} -- Gitblit v1.9.1