using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; 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 { /// /// 查询角色用户列表 /// public class GetRoleUserInfosQueryHandler( IRepository repRole, IRepository repUserInfo, IRepository repUserInfoRole ) : IRequestHandler> { private readonly IRepository repRole = repRole; private readonly IRepository repUserInfo = repUserInfo; private readonly IRepository repUserInfoRole = repUserInfoRole; /// public async Task> Handle(GetRoleUserInfosQuery request, CancellationToken cancellationToken) { var role = await repRole.AsQueryable().AsNoTracking() .Where(it => it.Id == request.RoleId) .Select(it => new { it.UserType, }) .FirstOrDefaultAsync(cancellationToken); if (role == null) throw Oops.Oh(EnumErrorCodeType.s404, "该角色"); var userInfoIds = await repUserInfoRole.AsQueryable().AsNoTracking() .Where(it => it.RoleId == request.RoleId) .Select(it => it.UserInfoId) .ToListAsync(cancellationToken); var userInfos = await repUserInfo.AsQueryable().AsNoTracking() .Include(it => it.UserAuth) .Where(it => it.Type == role.UserType) .Select(it => new GetRoleUserInfosQueryResultItem { Id = it.Id, Name = it.UserAuth.Name, UserName = it.UserAuth.UserName, }) .ToListAsync(cancellationToken); foreach (var userInfo in userInfos) { userInfo.IsChecked = userInfoIds.Contains(userInfo.Id); } return userInfos; } } }