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.UserServer.Application
{
///
/// 查询用户角色列表
///
public class GetUserInfoRolesQueryHandler(
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(GetUserInfoRolesQuery request, CancellationToken cancellationToken)
{
var userInfo = await repUser.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 repUserRole.AsQueryable().AsNoTracking()
.Where(it => it.UserId == 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;
}
}
}