using CellularManagement.Domain.Common;
using CellularManagement.Domain.Entities.Device;
using CellularManagement.Domain.Repositories;
using CellularManagement.Domain.Repositories.Device;
using MediatR;
using Microsoft.Extensions.Logging;
namespace CellularManagement.Application.Features.Devices.Queries.GetDeviceById;
///
/// 根据ID获取设备查询处理器
///
public class GetDeviceByIdQueryHandler : IRequestHandler>
{
private readonly ICellularDeviceRepository _deviceRepository;
private readonly ILogger _logger;
///
/// 初始化查询处理器
///
public GetDeviceByIdQueryHandler(
ICellularDeviceRepository deviceRepository,
ILogger logger)
{
_deviceRepository = deviceRepository;
_logger = logger;
}
///
/// 处理查询请求
///
public async Task> Handle(GetDeviceByIdQuery request, CancellationToken cancellationToken)
{
try
{
_logger.LogInformation("开始查询设备,设备ID: {DeviceId}", request.DeviceId);
var device = await _deviceRepository.GetDeviceByIdAsync(request.DeviceId, cancellationToken);
if (device == null)
{
_logger.LogWarning("未找到设备,设备ID: {DeviceId}", request.DeviceId);
return OperationResult.CreateFailure($"未找到ID为 {request.DeviceId} 的设备");
}
var response = new GetDeviceByIdResponse
{
DeviceId = device.Id,
DeviceName = device.Name,
SerialNumber = device.SerialNumber,
DeviceType = device.DeviceType?.Name ?? "未知",
Status = device.Status?.Name ?? "未知",
ProtocolVersion = device.ProtocolVersion?.Version ?? "未知",
FirmwareVersion = device.FirmwareVersion,
CreatedAt = device.CreatedAt
};
_logger.LogInformation("成功查询到设备,设备ID: {DeviceId}", request.DeviceId);
return OperationResult.CreateSuccess(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "查询设备时发生错误,设备ID: {DeviceId}", request.DeviceId);
return OperationResult.CreateFailure($"查询设备时发生错误: {ex.Message}");
}
}
}