using 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.UserServer.Application
{
///
/// 查询角色用户列表
///
public class GetRoleUserInfosQueryHandler(
IRepository repRole,
IRepository repUser,
IRepository repUserRole
) : IRequestHandler>
{
private readonly IRepository repRole = repRole;
private readonly IRepository repUser = repUser;
private readonly IRepository repUserRole = repUserRole;
///
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 userIds = await repUserRole.AsQueryable().AsNoTracking()
.Where(it => it.RoleId == request.RoleId)
.Select(it => it.UserId)
.ToListAsync(cancellationToken);
var userInfos = await repUser.AsQueryable().AsNoTracking()
.Where(it => it.Type == role.UserType)
.ProjectToType()
.ToListAsync(cancellationToken);
foreach (var userInfo in userInfos)
{
userInfo.IsChecked = userIds.Contains(userInfo.Id);
}
return userInfos;
}
}
}