You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
4.1 KiB

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using Microsoft.Extensions.Logging;
using X1.Domain.Entities;
using X1.Domain.Repositories.Identity;
using X1.Domain.Common;
using System.Collections.Generic;
namespace X1.Application.Features.Permissions.Queries;
/// <summary>
/// 获取所有权限查询处理器
/// </summary>
public sealed class GetAllPermissionsQueryHandler : IRequestHandler<GetAllPermissionsQuery, OperationResult<GetAllPermissionsResponse>>
{
private readonly IPermissionRepository _permissionRepository;
private readonly ILogger<GetAllPermissionsQueryHandler> _logger;
/// <summary>
/// 初始化处理器
/// </summary>
public GetAllPermissionsQueryHandler(
IPermissionRepository permissionRepository,
ILogger<GetAllPermissionsQueryHandler> logger)
{
_permissionRepository = permissionRepository;
_logger = logger;
}
/// <summary>
/// 处理获取所有权限查询
/// </summary>
public async Task<OperationResult<GetAllPermissionsResponse>> Handle(
GetAllPermissionsQuery request,
CancellationToken cancellationToken)
{
try
{
_logger.LogInformation("开始获取权限列表,页码: {PageNumber}, 页大小: {PageSize}", request.PageNumber, request.PageSize);
var permissions = await _permissionRepository.GetAllAsync();
if (!permissions.Any())
{
_logger.LogWarning("未找到任何权限");
return OperationResult<GetAllPermissionsResponse>.CreateSuccess(
new GetAllPermissionsResponse(
new List<PermissionListItemDto>(),
0,
request.PageNumber,
request.PageSize
));
}
// 应用筛选条件
var filteredPermissions = permissions.AsQueryable();
// 关键词搜索
if (!string.IsNullOrWhiteSpace(request.Keyword))
{
filteredPermissions = filteredPermissions.Where(p =>
p.Name.Contains(request.Keyword) ||
p.Code.Contains(request.Keyword) ||
(p.Description != null && p.Description.Contains(request.Keyword))
);
}
// 启用状态筛选
if (request.IsEnabled.HasValue)
{
filteredPermissions = filteredPermissions.Where(p => p.IsEnabled == request.IsEnabled.Value);
}
// 系统权限筛选
if (request.IsSystem.HasValue)
{
filteredPermissions = filteredPermissions.Where(p => p.IsSystem == request.IsSystem.Value);
}
// 获取总数
var totalCount = filteredPermissions.Count();
// 分页
var pagedPermissions = filteredPermissions
.Skip((request.PageNumber - 1) * request.PageSize)
.Take(request.PageSize)
.ToList();
// 转换为DTO
var permissionDtos = pagedPermissions.Select(p => new PermissionListItemDto(
p.Id,
p.Name,
p.Code,
p.Description,
p.IsEnabled,
p.IsSystem
)).ToList();
var response = new GetAllPermissionsResponse(
permissionDtos,
totalCount,
request.PageNumber,
request.PageSize
);
_logger.LogInformation("权限列表获取成功,共 {TotalCount} 条记录,当前页 {PageNumber}/{TotalPages}",
totalCount, request.PageNumber, response.TotalPages);
return OperationResult<GetAllPermissionsResponse>.CreateSuccess(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "获取权限列表时发生错误");
return OperationResult<GetAllPermissionsResponse>.CreateFailure(
new List<string> { "获取权限列表失败" });
}
}
}