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