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.

66 lines
2.3 KiB

using System;
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;
namespace X1.Application.Features.Permissions.Commands.UpdatePermission;
/// <summary>
/// 更新权限命令处理器
/// </summary>
public sealed class UpdatePermissionCommandHandler : IRequestHandler<UpdatePermissionCommand, OperationResult<UpdatePermissionResponse>>
{
private readonly IPermissionRepository _permissionRepository;
private readonly ILogger<UpdatePermissionCommandHandler> _logger;
/// <summary>
/// 初始化处理器
/// </summary>
public UpdatePermissionCommandHandler(
IPermissionRepository permissionRepository,
ILogger<UpdatePermissionCommandHandler> logger)
{
_permissionRepository = permissionRepository;
_logger = logger;
}
/// <summary>
/// 处理更新权限请求
/// </summary>
public async Task<OperationResult<UpdatePermissionResponse>> Handle(
UpdatePermissionCommand request,
CancellationToken cancellationToken)
{
try
{
// 查找权限
var permission = await _permissionRepository.GetByIdAsync(request.Id, cancellationToken: cancellationToken);
if (permission == null)
{
_logger.LogWarning("权限 {PermissionId} 不存在", request.Id);
return OperationResult<UpdatePermissionResponse>.CreateFailure("权限不存在");
}
// 更新权限信息
permission.Name = request.Name;
permission.Description = request.Description;
permission.IsEnabled = request.IsEnabled ?? permission.IsEnabled;
_permissionRepository.Update(permission);
_logger.LogInformation("权限 {PermissionId} 更新成功", request.Id);
return OperationResult<UpdatePermissionResponse>.CreateSuccess(
new UpdatePermissionResponse(request.Id, true));
}
catch (Exception ex)
{
_logger.LogError(ex, "更新权限 {PermissionId} 失败", request.Id);
return OperationResult<UpdatePermissionResponse>.CreateFailure("更新权限失败,请稍后重试");
}
}
}