using BuildFlow.Shared.Domain.Exceptions;
using MediatR;
using BuildFlow.Application.Roles.DTOs;
using BuildFlow.Infrastructure.Persistence;
using BuildFlow.Application.Roles.Queries;
namespace BuildFlow.Application.Roles.Handlers;
///
/// Get角色ById查询处理器。执行业务校验后持久化。
///
public class GetRoleByIdQueryHandler(RagDbContext db) : IRequestHandler
{
public async Task Handle(GetRoleByIdQuery request, CancellationToken ct)
{
var role = await db.Roles
.Include(r => r.RolePermissions).ThenInclude(rp => rp.Permission)
.FirstOrDefaultAsync(r => r.Id == request.Id, ct)
?? throw new NotFoundException("角色不存在");
return new RoleDto(role.Id, role.Name, role.Description, role.CreatedAt,
role.RolePermissions.Select(rp => rp.Permission.Code).ToList());
}
}