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("获取用户列表失败");
}
}
}