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;
}
}
}