using MediatR; using TakeoutSaaS.Application.Identity.Contracts; using TakeoutSaaS.Application.Identity.Queries; using TakeoutSaaS.Domain.Identity.Repositories; namespace TakeoutSaaS.Application.Identity.Handlers; /// /// 角色模板列表查询处理器。 /// public sealed class ListRoleTemplatesQueryHandler(IRoleTemplateRepository roleTemplateRepository) : IRequestHandler> { /// public async Task> Handle(ListRoleTemplatesQuery request, CancellationToken cancellationToken) { // 1. 查询模板与权限映射 var templates = await roleTemplateRepository.GetAllAsync(request.IsActive, cancellationToken); var permissionsMap = await roleTemplateRepository.GetPermissionsAsync(templates.Select(t => t.Id), cancellationToken); // 2. 排序并映射 DTO var dtos = templates .OrderBy(template => template.TemplateCode, StringComparer.OrdinalIgnoreCase) .Select(template => { var codes = permissionsMap.TryGetValue(template.Id, out var perms) ? (IReadOnlyCollection)perms.Select(p => p.PermissionCode).ToArray() : Array.Empty(); return TemplateMapper.ToDto(template, codes); }) .ToArray(); // 3. 返回结果 return dtos; } }