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 GetUserInfoRolesQueryHandler( 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(GetUserInfoRolesQuery request, CancellationToken cancellationToken) { var userInfo = await repUserInfo.AsQueryable().AsNoTracking() .Where(it => it.Id == request.UserInfoId) .Select(it => new { it.Type, }) .FirstOrDefaultAsync(cancellationToken); if (userInfo == null) throw Oops.Oh(EnumErrorCodeType.s404, "该用户信息"); var roleIds = await repUserInfoRole.AsQueryable().AsNoTracking() .Where(it => it.UserInfoId == request.UserInfoId) .Select(it => it.RoleId) .ToListAsync(cancellationToken); var roles = await repRole.AsQueryable().AsNoTracking() .Where(it => it.UserType == userInfo.Type && it.ClientType == request.ClientType) .Select(it => new GetUserInfoRolesQueryResultItem { Id = it.Id, Name = it.Name, Remark = it.Remark, }) .ToListAsync(cancellationToken); foreach (var role in roles) { role.IsChecked = roleIds.Contains(role.Id); } return roles; } } }