using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Logging; using MediatR; using CellularManagement.Domain.Entities; using CellularManagement.Application.Features.Users.Queries.Dtos; using Microsoft.EntityFrameworkCore; using CellularManagement.Domain.Common; using System.Threading.Tasks; using System.Threading; using System.Linq; using System; namespace CellularManagement.Application.Features.Users.Queries.GetAllUsers; /// /// 获取所有用户查询处理器 /// 处理获取系统中所有用户信息的业务逻辑 /// public sealed class GetAllUsersQueryHandler : IRequestHandler> { private readonly UserManager _userManager; private readonly ILogger _logger; /// /// 构造函数 /// /// 用户管理器,用于管理用户身份 /// 日志记录器 public GetAllUsersQueryHandler( UserManager userManager, ILogger logger) { _userManager = userManager; _logger = logger; } /// /// 处理获取所有用户命令 /// /// 查询命令 /// 取消令牌 /// 操作结果,包含所有用户信息列表 public async Task> Handle( GetAllUsersQuery request, CancellationToken cancellationToken) { try { // 构建基础查询 var query = _userManager.Users.AsQueryable(); // 应用条件过滤 if (!string.IsNullOrWhiteSpace(request.UserName)) { query = query.Where(u => u.UserName.Contains(request.UserName)); } if (!string.IsNullOrWhiteSpace(request.Email)) { query = query.Where(u => u.Email.Contains(request.Email)); } if (!string.IsNullOrWhiteSpace(request.PhoneNumber)) { query = query.Where(u => u.PhoneNumber.Contains(request.PhoneNumber)); } // 获取总记录数 var totalCount = await query.CountAsync(cancellationToken); // 应用分页 var users = await query .Skip((request.PageNumber - 1) * request.PageSize) .Take(request.PageSize) .ToListAsync(cancellationToken); // 转换为DTO对象 var userDtos = users.Select(user => new UserDto( user.Id, user.UserName, user.Email, user.PhoneNumber)).ToList(); // 构建响应对象 var response = new GetAllUsersResponse( userDtos, totalCount, request.PageNumber, request.PageSize); return OperationResult.CreateSuccess(response); } catch (Exception ex) { _logger.LogError(ex, "获取所有用户时发生错误"); return OperationResult.CreateFailure("获取用户列表失败"); } } }