File was renamed from FlexJobApi.User.Application/Roles/Queries/GetRoleUserInfosQueryHandler.cs |
| | |
| | | using FlexJobApi.Core; |
| | | using Furion.DatabaseAccessor; |
| | | using Furion.FriendlyException; |
| | | using Mapster; |
| | | using MediatR; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using System; |
| | |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace FlexJobApi.User.Application |
| | | namespace FlexJobApi.UserServer.Application |
| | | { |
| | | /// <summary> |
| | | /// 查询角色用户列表 |
| | | /// </summary> |
| | | public class GetRoleUserInfosQueryHandler( |
| | | IRepository<Role> repRole, |
| | | IRepository<UserInfo> repUserInfo, |
| | | IRepository<UserInfoRole> repUserInfoRole |
| | | IRepository<User> repUser, |
| | | IRepository<UserRole> repUserRole |
| | | ) : IRequestHandler<GetRoleUserInfosQuery, List<GetRoleUserInfosQueryResultItem>> |
| | | { |
| | | private readonly IRepository<Role> repRole = repRole; |
| | | private readonly IRepository<UserInfo> repUserInfo = repUserInfo; |
| | | private readonly IRepository<UserInfoRole> repUserInfoRole = repUserInfoRole; |
| | | private readonly IRepository<User> repUser = repUser; |
| | | private readonly IRepository<UserRole> repUserRole = repUserRole; |
| | | |
| | | /// <inheritdoc/> |
| | | public async Task<List<GetRoleUserInfosQueryResultItem>> Handle(GetRoleUserInfosQuery request, CancellationToken cancellationToken) |
| | |
| | | }) |
| | | .FirstOrDefaultAsync(cancellationToken); |
| | | if (role == null) throw Oops.Oh(EnumErrorCodeType.s404, "该角色"); |
| | | var userInfoIds = await repUserInfoRole.AsQueryable().AsNoTracking() |
| | | var userIds = await repUserRole.AsQueryable().AsNoTracking() |
| | | .Where(it => it.RoleId == request.RoleId) |
| | | .Select(it => it.UserInfoId) |
| | | .Select(it => it.UserId) |
| | | .ToListAsync(cancellationToken); |
| | | var userInfos = await repUserInfo.AsQueryable().AsNoTracking() |
| | | .Include(it => it.UserAuth) |
| | | var userInfos = await repUser.AsQueryable().AsNoTracking() |
| | | .Where(it => it.Type == role.UserType) |
| | | .Select(it => new GetRoleUserInfosQueryResultItem |
| | | { |
| | | Id = it.Id, |
| | | Name = it.UserAuth.Name, |
| | | UserName = it.UserAuth.UserName, |
| | | }) |
| | | .ProjectToType<GetRoleUserInfosQueryResultItem>() |
| | | .ToListAsync(cancellationToken); |
| | | foreach (var userInfo in userInfos) |
| | | { |
| | | userInfo.IsChecked = userInfoIds.Contains(userInfo.Id); |
| | | userInfo.IsChecked = userIds.Contains(userInfo.Id); |
| | | } |
| | | return userInfos; |
| | | } |