using MediatR; using CellularManagement.Domain.Repositories; using Microsoft.Extensions.Logging; using CellularManagement.Domain.Common; using System.Threading.Tasks; using System.Threading; using System; using System.Linq; namespace CellularManagement.Application.Features.RolePermissions.Commands.AddRolePermissions; /// /// 添加角色权限命令处理器 /// public class AddRolePermissionsCommandHandler : IRequestHandler> { private readonly IRolePermissionRepository _rolePermissionRepository; private readonly ILogger _logger; public AddRolePermissionsCommandHandler( IRolePermissionRepository rolePermissionRepository, ILogger logger) { _rolePermissionRepository = rolePermissionRepository; _logger = logger; } public async Task> Handle( AddRolePermissionsCommand request, CancellationToken cancellationToken) { try { // 获取角色当前已有的权限 var existingPermissions = await _rolePermissionRepository.GetPermissionsByRoleIdAsync(request.RoleId, cancellationToken); var existingPermissionIds = existingPermissions.Select(p => p.Id).ToList(); // 过滤出需要新增的权限ID var newPermissionIds = request.PermissionIds.Except(existingPermissionIds).ToList(); if (!newPermissionIds.Any()) { return OperationResult.CreateFailure("所有权限已存在,无需添加"); } // 添加新的角色权限 var addedRolePermissions = await _rolePermissionRepository.AddRolePermissionsAsync( request.RoleId, newPermissionIds, cancellationToken); var response = new AddRolePermissionsResponse { AddedPermissionIds = newPermissionIds, FailedPermissionIds = request.PermissionIds.Except(newPermissionIds) }; _logger.LogInformation( "成功为角色 {RoleId} 添加 {Count} 个权限", request.RoleId, newPermissionIds.Count); return OperationResult.CreateSuccess(response); } catch (Exception ex) { _logger.LogError( ex, "为角色 {RoleId} 添加权限时发生错误", request.RoleId); return OperationResult.CreateFailure( "添加角色权限失败,请稍后重试"); } } }