using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Logging; using MediatR; using CellularManagement.Domain.Entities; using CellularManagement.Domain.Repositories; using CellularManagement.Domain.Common; using System.Threading.Tasks; using System.Threading; using System; using System.Linq; namespace CellularManagement.Application.Features.Users.Commands.CreateUser; /// /// 创建用户命令处理器 /// 处理创建新用户的业务逻辑 /// public sealed class CreateUserCommandHandler : IRequestHandler> { private readonly UserManager _userManager; private readonly ILogger _logger; private readonly IUnitOfWork _unitOfWork; /// /// 构造函数 /// /// 用户管理器,用于管理用户身份 /// 日志记录器 /// 工作单元,用于事务管理 public CreateUserCommandHandler( UserManager userManager, ILogger logger, IUnitOfWork unitOfWork) { _userManager = userManager; _logger = logger; _unitOfWork = unitOfWork; } /// /// 处理创建用户命令 /// /// 创建用户命令 /// 取消令牌 /// 操作结果,包含创建的用户ID public async Task> Handle( CreateUserCommand request, CancellationToken cancellationToken) { try { // 检查用户是否已存在 var existingUser = await _userManager.FindByEmailAsync(request.Email); if (existingUser != null) { _logger.LogWarning("用户邮箱 {Email} 已存在", request.Email); return OperationResult.CreateFailure("用户已存在"); } // 创建新用户 var user = new AppUser { UserName = request.UserName, Email = request.Email, PhoneNumber = request.PhoneNumber }; // 在事务中创建用户 await _unitOfWork.ExecuteTransactionAsync(async () => { var result = await _userManager.CreateAsync(user, request.Password); if (!result.Succeeded) { var errors = result.Errors.Select(e => e.Description).ToList(); _logger.LogWarning("创建用户失败: {Errors}", string.Join(", ", errors)); throw new InvalidOperationException(string.Join(", ", errors)); } }, cancellationToken: cancellationToken); _logger.LogInformation("用户 {UserId} 创建成功", user.Id); return OperationResult.CreateSuccess( new CreateUserResponse(user.Id)); } catch (Exception ex) { _logger.LogError(ex, "创建用户时发生错误"); _logger.LogError(ex, "Error creating user"); return OperationResult.CreateFailure("Failed to create user"); } } }