diff --git a/CoreAgent.API/Controllers/BaseApiController.cs b/CoreAgent.API/Controllers/BaseApiController.cs index d5a5bbd..16ad0c9 100644 --- a/CoreAgent.API/Controllers/BaseApiController.cs +++ b/CoreAgent.API/Controllers/BaseApiController.cs @@ -1,3 +1,4 @@ +using CoreAgent.Domain.Exceptions; using CoreAgent.Domain.Models.Common; using MediatR; using Microsoft.AspNetCore.Mvc; @@ -24,12 +25,13 @@ namespace CoreAgent.API.Controllers { try { - _logger.LogInformation("Handling request of type {RequestType}", typeof(TRequest).Name); + _logger.LogInformation("开始处理请求: {RequestType}", typeof(TRequest).Name); var response = await _mediator.Send(request); - return ApiActionResult.Ok(response); + return response as IActionResult; } catch (Exception ex) { + _logger.LogError(ex, "处理请求时发生错误: {RequestType}", typeof(TRequest).Name); return HandleException(ex); } } @@ -51,8 +53,19 @@ namespace CoreAgent.API.Controllers private IActionResult HandleException(Exception ex) { - _logger.LogError(ex, "Error handling request"); - return ApiActionResult.Error(ex.Message, "INTERNAL_ERROR", HttpStatusCode.InternalServerError); + return ex switch + { + ValidationException validationEx => + ApiActionResult.Error(validationEx.Message, "VALIDATION_ERROR", HttpStatusCode.BadRequest), + NotFoundException notFoundEx => + ApiActionResult.Error(notFoundEx.Message, "NOT_FOUND", HttpStatusCode.NotFound), + UnauthorizedAccessException => + ApiActionResult.Error("您没有权限访问此资源", "UNAUTHORIZED", HttpStatusCode.Unauthorized), + _ => ApiActionResult.Error( + "服务器内部错误,请稍后重试", + "INTERNAL_ERROR", + HttpStatusCode.InternalServerError) + }; } private IActionResult HandleException(Exception ex) @@ -61,10 +74,10 @@ namespace CoreAgent.API.Controllers return ApiActionResult.Error(ex.Message, "INTERNAL_ERROR", HttpStatusCode.InternalServerError); } - protected IActionResult Success(T data, string message = null) => + protected IActionResult Success(T data, string message = "操作成功") => ApiActionResult.Ok(data, message); - protected IActionResult Success(string message = null) => + protected IActionResult Success(string message = "操作成功") => ApiActionResult.Ok(message); protected IActionResult Error(string message, string errorCode = "ERROR", HttpStatusCode statusCode = HttpStatusCode.BadRequest) => diff --git a/CoreAgent.API/Controllers/CellularNetworkController.cs b/CoreAgent.API/Controllers/CellularNetworkController.cs index 0f7b064..aaa83e3 100644 --- a/CoreAgent.API/Controllers/CellularNetworkController.cs +++ b/CoreAgent.API/Controllers/CellularNetworkController.cs @@ -1,4 +1,5 @@ using CoreAgent.Application.Commands.CellularNetwork; +using CoreAgent.Domain.Models.Common; using CoreAgent.Domain.Models.Network; using MediatR; using Microsoft.AspNetCore.Mvc; @@ -27,10 +28,13 @@ public class CellularNetworkController : BaseApiController /// 启动命令 /// 操作结果 [HttpPost("start")] + [ProducesResponseType(typeof(ApiActionResult), 200)] + [ProducesResponseType(typeof(ApiActionResult), 400)] + [ProducesResponseType(typeof(ApiActionResult), 500)] public async Task Start([FromBody] StartCellularNetworkCommand command) { _logger.LogInformation("收到启动蜂窝网络请求: {ConfigKey}", command.Key); - return await HandleRequest(command); + return await HandleRequest>(command); } /// @@ -39,9 +43,12 @@ public class CellularNetworkController : BaseApiController /// 停止命令 /// 操作结果 [HttpPost("stop")] + [ProducesResponseType(typeof(ApiActionResult), 200)] + [ProducesResponseType(typeof(ApiActionResult), 400)] + [ProducesResponseType(typeof(ApiActionResult), 500)] public async Task Stop([FromBody] StopCellularNetworkCommand command) { - _logger.LogInformation("收到停止蜂窝网络请求: {InterfaceName}", command.InterfaceName); - return await HandleRequest(command); + _logger.LogInformation("收到停止蜂窝网络请求: {InterfaceName}", command.Key); + return await HandleRequest>(command); } } \ No newline at end of file diff --git a/CoreAgent.API/Controllers/NetworkConfigController.cs b/CoreAgent.API/Controllers/NetworkConfigController.cs index 97d23a9..54faae4 100644 --- a/CoreAgent.API/Controllers/NetworkConfigController.cs +++ b/CoreAgent.API/Controllers/NetworkConfigController.cs @@ -1,8 +1,9 @@ using System.Threading.Tasks; using CoreAgent.Application.Commands.NetworkConfig; -using CoreAgent.Application.Queries.NetworkConfig; using CoreAgent.Domain.Entities; +using CoreAgent.Domain.Models.Common; using MediatR; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; @@ -29,10 +30,11 @@ namespace CoreAgent.API.Controllers /// /// 网络配置列表 [HttpGet] - [ProducesResponseType(typeof(List), 200)] + [ProducesResponseType(typeof(ApiActionResult>), 200)] + [ProducesResponseType(typeof(ApiActionResult>), 500)] public async Task GetAll() { - return await HandleRequest>( + return await HandleRequest>>( new GetAllNetworkConfigurationsQuery()); } @@ -42,11 +44,12 @@ namespace CoreAgent.API.Controllers /// 配置键值 /// 网络配置 [HttpGet("{configKey}")] - [ProducesResponseType(typeof(NetworkConfiguration), 200)] - [ProducesResponseType(404)] + [ProducesResponseType(typeof(ApiActionResult), 200)] + [ProducesResponseType(typeof(ApiActionResult), 404)] + [ProducesResponseType(typeof(ApiActionResult), 500)] public async Task GetByKey(string configKey) { - return await HandleRequest( + return await HandleRequest>( new GetNetworkConfigurationByKeyQuery { ConfigKey = configKey }); } @@ -56,18 +59,12 @@ namespace CoreAgent.API.Controllers /// 创建网络配置命令 /// 创建的网络配置 [HttpPost] - [ProducesResponseType(typeof(NetworkConfiguration), 201)] - [ProducesResponseType(400)] + [ProducesResponseType(typeof(ApiActionResult), 200)] + [ProducesResponseType(typeof(ApiActionResult), 400)] + [ProducesResponseType(typeof(ApiActionResult), 500)] public async Task Create([FromBody] CreateNetworkConfigurationCommand command) { - var result = await HandleRequest(command); - if (result is OkObjectResult okResult) - { - return CreatedAtAction(nameof(GetByKey), - new { configKey = command.ConfigKey }, - okResult.Value); - } - return result; + return await HandleRequest>(command); } /// @@ -76,12 +73,13 @@ namespace CoreAgent.API.Controllers /// 配置键值 /// 操作结果 [HttpDelete("{configKey}")] - [ProducesResponseType(204)] - [ProducesResponseType(404)] + [ProducesResponseType(typeof(ApiActionResult), 200)] + [ProducesResponseType(typeof(ApiActionResult), 400)] + [ProducesResponseType(typeof(ApiActionResult), 500)] public async Task Delete(string configKey) { var command = new DeleteNetworkConfigurationCommand { ConfigKey = configKey }; - return await HandleRequest(command); + return await HandleRequest>(command); } } } \ No newline at end of file diff --git a/CoreAgent.Application/Commands/CellularNetwork/StartCellularNetworkCommand.cs b/CoreAgent.Application/Commands/CellularNetwork/StartCellularNetworkCommand.cs index fa21763..0ce4c13 100644 --- a/CoreAgent.Application/Commands/CellularNetwork/StartCellularNetworkCommand.cs +++ b/CoreAgent.Application/Commands/CellularNetwork/StartCellularNetworkCommand.cs @@ -1,3 +1,4 @@ +using CoreAgent.Domain.Models.Common; using CoreAgent.Domain.Models.Network; using MediatR; @@ -6,7 +7,7 @@ namespace CoreAgent.Application.Commands.CellularNetwork; /// /// 启动蜂窝网络命令 /// -public class StartCellularNetworkCommand : IRequest +public class StartCellularNetworkCommand : IRequest> { /// /// 网络配置键 diff --git a/CoreAgent.Application/Commands/CellularNetwork/StopCellularNetworkCommand.cs b/CoreAgent.Application/Commands/CellularNetwork/StopCellularNetworkCommand.cs index da9f884..312ff43 100644 --- a/CoreAgent.Application/Commands/CellularNetwork/StopCellularNetworkCommand.cs +++ b/CoreAgent.Application/Commands/CellularNetwork/StopCellularNetworkCommand.cs @@ -1,3 +1,4 @@ +using CoreAgent.Domain.Models.Common; using MediatR; namespace CoreAgent.Application.Commands.CellularNetwork; @@ -5,10 +6,10 @@ namespace CoreAgent.Application.Commands.CellularNetwork; /// /// 停止蜂窝网络命令 /// -public class StopCellularNetworkCommand : IRequest +public class StopCellularNetworkCommand : IRequest> { /// /// 网络接口名称 /// - public string InterfaceName { get; set; } + public string Key { get; set; } } \ No newline at end of file diff --git a/CoreAgent.Application/Commands/NetworkConfig/CreateNetworkConfigurationCommand.cs b/CoreAgent.Application/Commands/NetworkConfig/CreateNetworkConfigurationCommand.cs index 4448b86..32f01ae 100644 --- a/CoreAgent.Application/Commands/NetworkConfig/CreateNetworkConfigurationCommand.cs +++ b/CoreAgent.Application/Commands/NetworkConfig/CreateNetworkConfigurationCommand.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using CoreAgent.Domain.Entities; +using CoreAgent.Domain.Models.Common; using MediatR; namespace CoreAgent.Application.Commands.NetworkConfig @@ -7,7 +8,7 @@ namespace CoreAgent.Application.Commands.NetworkConfig /// /// 创建网络配置命令 /// - public class CreateNetworkConfigurationCommand : IRequest + public class CreateNetworkConfigurationCommand : IRequest> { /// /// 配置键值 diff --git a/CoreAgent.Application/Commands/NetworkConfig/DeleteNetworkConfigurationCommand.cs b/CoreAgent.Application/Commands/NetworkConfig/DeleteNetworkConfigurationCommand.cs index 4d998d5..c138164 100644 --- a/CoreAgent.Application/Commands/NetworkConfig/DeleteNetworkConfigurationCommand.cs +++ b/CoreAgent.Application/Commands/NetworkConfig/DeleteNetworkConfigurationCommand.cs @@ -1,3 +1,4 @@ +using CoreAgent.Domain.Models.Common; using MediatR; namespace CoreAgent.Application.Commands.NetworkConfig @@ -5,7 +6,7 @@ namespace CoreAgent.Application.Commands.NetworkConfig /// /// 删除网络配置命令 /// - public class DeleteNetworkConfigurationCommand : IRequest + public class DeleteNetworkConfigurationCommand : IRequest> { /// /// 配置键值 diff --git a/CoreAgent.Application/Commands/NetworkConfig/GetAllNetworkConfigurationsQuery.cs b/CoreAgent.Application/Commands/NetworkConfig/GetAllNetworkConfigurationsQuery.cs new file mode 100644 index 0000000..a64bf04 --- /dev/null +++ b/CoreAgent.Application/Commands/NetworkConfig/GetAllNetworkConfigurationsQuery.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using CoreAgent.Domain.Entities; +using CoreAgent.Domain.Models.Common; +using MediatR; + +namespace CoreAgent.Application.Commands.NetworkConfig +{ + /// + /// 获取所有网络配置查询 + /// + public class GetAllNetworkConfigurationsQuery : IRequest>> + { + } +} \ No newline at end of file diff --git a/CoreAgent.Application/Commands/NetworkConfig/GetNetworkConfigurationByKeyQuery.cs b/CoreAgent.Application/Commands/NetworkConfig/GetNetworkConfigurationByKeyQuery.cs new file mode 100644 index 0000000..98b57c3 --- /dev/null +++ b/CoreAgent.Application/Commands/NetworkConfig/GetNetworkConfigurationByKeyQuery.cs @@ -0,0 +1,17 @@ +using CoreAgent.Domain.Entities; +using CoreAgent.Domain.Models.Common; +using MediatR; + +namespace CoreAgent.Application.Commands.NetworkConfig +{ + /// + /// 根据配置键获取网络配置查询 + /// + public class GetNetworkConfigurationByKeyQuery : IRequest> + { + /// + /// 配置键值 + /// + public string ConfigKey { get; set; } + } +} \ No newline at end of file diff --git a/CoreAgent.Application/Handlers/CellularNetwork/StartCellularNetworkCommandHandler.cs b/CoreAgent.Application/Handlers/CellularNetwork/StartCellularNetworkCommandHandler.cs index 3ee4efc..9ad3022 100644 --- a/CoreAgent.Application/Handlers/CellularNetwork/StartCellularNetworkCommandHandler.cs +++ b/CoreAgent.Application/Handlers/CellularNetwork/StartCellularNetworkCommandHandler.cs @@ -1,5 +1,6 @@ using CoreAgent.Application.Commands.CellularNetwork; using CoreAgent.Domain.Interfaces.Network; +using CoreAgent.Domain.Models.Common; using CoreAgent.Domain.Models.Network; using MediatR; using Microsoft.Extensions.Logging; @@ -9,7 +10,7 @@ namespace CoreAgent.Application.Handlers.CellularNetwork; /// /// 启动蜂窝网络命令处理器 /// -public class StartCellularNetworkCommandHandler : IRequestHandler +public class StartCellularNetworkCommandHandler : IRequestHandler> { private readonly ICellularNetworkService _cellularNetworkService; private readonly ILogger _logger; @@ -22,7 +23,7 @@ public class StartCellularNetworkCommandHandler : IRequestHandler Handle(StartCellularNetworkCommand request, CancellationToken cancellationToken) + public async Task> Handle(StartCellularNetworkCommand request, CancellationToken cancellationToken) { try { @@ -34,18 +35,24 @@ public class StartCellularNetworkCommandHandler : IRequestHandler.Ok(result, "蜂窝网络启动成功"); } else { _logger.LogWarning("蜂窝网络配置 {ConfigKey} 启动失败: {Error}", request.Key, result.ErrorMessage); + return ApiActionResult.Error( + result.ErrorMessage, + "NETWORK_START_ERROR", + System.Net.HttpStatusCode.BadRequest); } - - return result; } catch (Exception ex) { _logger.LogError(ex, "启动蜂窝网络配置 {ConfigKey} 失败", request.Key); - return CellularNetworkOperationResult.Failure($"启动蜂窝网络失败: {ex.Message}"); + return ApiActionResult.Error( + $"启动蜂窝网络失败: {ex.Message}", + "INTERNAL_ERROR", + System.Net.HttpStatusCode.InternalServerError); } } } \ No newline at end of file diff --git a/CoreAgent.Application/Handlers/CellularNetwork/StopCellularNetworkCommandHandler.cs b/CoreAgent.Application/Handlers/CellularNetwork/StopCellularNetworkCommandHandler.cs index 1729098..648ffd6 100644 --- a/CoreAgent.Application/Handlers/CellularNetwork/StopCellularNetworkCommandHandler.cs +++ b/CoreAgent.Application/Handlers/CellularNetwork/StopCellularNetworkCommandHandler.cs @@ -1,5 +1,6 @@ using CoreAgent.Application.Commands.CellularNetwork; using CoreAgent.Domain.Interfaces.Network; +using CoreAgent.Domain.Models.Common; using MediatR; using Microsoft.Extensions.Logging; @@ -8,7 +9,7 @@ namespace CoreAgent.Application.Handlers.CellularNetwork; /// /// 停止蜂窝网络命令处理器 /// -public class StopCellularNetworkCommandHandler : IRequestHandler +public class StopCellularNetworkCommandHandler : IRequestHandler> { private readonly ICellularNetworkService _cellularNetworkService; private readonly ILogger _logger; @@ -21,39 +22,36 @@ public class StopCellularNetworkCommandHandler : IRequestHandler Handle(StopCellularNetworkCommand request, CancellationToken cancellationToken) + public async Task> Handle(StopCellularNetworkCommand request, CancellationToken cancellationToken) { try { - _logger.LogInformation("正在停止蜂窝网络接口: {InterfaceName}", request.InterfaceName); + _logger.LogInformation("正在停止蜂窝网络: {InterfaceName}", request.Key); // 停止网络 - var result = await _cellularNetworkService.StopAsync(); + var result = await _cellularNetworkService.StopAsync(request.Key); - if (result) + if (result.IsSuccess) { - _logger.LogInformation("蜂窝网络接口 {InterfaceName} 停止成功", request.InterfaceName); - - // 获取全局状态 - //var status = await _cellularNetworkService.GetGlobalStatusAsync(); - //_logger.LogInformation( - // "蜂窝网络状态: 已连接={IsConnected}, 信号强度={SignalStrength}, 网络类型={NetworkType}, 发射功率={TransmitPower}", - // status.CurrentStatus == NetworkStatus.Connected, - // status.CurrentSignalStrength, - // status.CurrentNetworkType, - // status.CurrentTransmitPower); + _logger.LogInformation("蜂窝网络 {InterfaceName} 停止成功", request.Key); + return ApiActionResult.Ok(true, "蜂窝网络停止成功"); } else { - _logger.LogWarning("蜂窝网络接口 {InterfaceName} 停止失败", request.InterfaceName); + _logger.LogWarning("蜂窝网络 {InterfaceName} 停止失败: {Error}", request.Key, result.ErrorMessage); + return ApiActionResult.Error( + result.ErrorMessage, + "NETWORK_STOP_ERROR", + System.Net.HttpStatusCode.BadRequest); } - - return result; } catch (Exception ex) { - _logger.LogError(ex, "停止蜂窝网络接口 {InterfaceName} 失败", request.InterfaceName); - return false; + _logger.LogError(ex, "停止蜂窝网络 {InterfaceName} 失败", request.Key); + return ApiActionResult.Error( + $"停止蜂窝网络失败: {ex.Message}", + "INTERNAL_ERROR", + System.Net.HttpStatusCode.InternalServerError); } } } \ No newline at end of file diff --git a/CoreAgent.Application/Handlers/NetworkConfig/Commands/CreateNetworkConfigurationCommandHandler.cs b/CoreAgent.Application/Handlers/NetworkConfig/Commands/CreateNetworkConfigurationCommandHandler.cs index 72d7325..5ffb2c3 100644 --- a/CoreAgent.Application/Handlers/NetworkConfig/Commands/CreateNetworkConfigurationCommandHandler.cs +++ b/CoreAgent.Application/Handlers/NetworkConfig/Commands/CreateNetworkConfigurationCommandHandler.cs @@ -4,24 +4,31 @@ using System.Threading.Tasks; using CoreAgent.Application.Commands.NetworkConfig; using CoreAgent.Domain.Entities; using CoreAgent.Domain.Interfaces; +using CoreAgent.Domain.Models.Common; using MediatR; +using Microsoft.Extensions.Logging; namespace CoreAgent.Application.Handlers.NetworkConfig.Commands { /// /// 创建网络配置命令处理器 /// - public class CreateNetworkConfigurationCommandHandler : IRequestHandler + public class CreateNetworkConfigurationCommandHandler : IRequestHandler> { private readonly INetworkConfigurationService _service; + private readonly ILogger _logger; /// /// 构造函数 /// /// 网络配置服务 - public CreateNetworkConfigurationCommandHandler(INetworkConfigurationService service) + /// 日志记录器 + public CreateNetworkConfigurationCommandHandler( + INetworkConfigurationService service, + ILogger logger) { _service = service; + _logger = logger; } /// @@ -29,17 +36,44 @@ namespace CoreAgent.Application.Handlers.NetworkConfig.Commands /// /// 创建网络配置命令 /// 取消令牌 - /// 创建的网络配置 - public async Task Handle(CreateNetworkConfigurationCommand request, CancellationToken cancellationToken) + /// 创建的网络配置结果 + public async Task> Handle(CreateNetworkConfigurationCommand request, CancellationToken cancellationToken) { - return await _service.CreateAsync( - request.ConfigKey, - request.RagConfig, - request.CoreOrImsConfigs, - request.Apn, - request.Band, - request.Comment - ); + try + { + _logger.LogInformation("正在创建网络配置: {ConfigKey}", request.ConfigKey); + + var (success, config) = await _service.CreateAsync( + request.ConfigKey, + request.RagConfig, + request.CoreOrImsConfigs, + request.Apn, + request.Band, + request.Comment + ); + + if (success) + { + _logger.LogInformation("网络配置创建成功: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Ok(config, "网络配置创建成功"); + } + else + { + _logger.LogWarning("网络配置创建失败,配置键已存在: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Error( + "配置键已存在", + "CONFIG_KEY_EXISTS", + System.Net.HttpStatusCode.Conflict); + } + } + catch (Exception ex) + { + _logger.LogError(ex, "创建网络配置失败: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Error( + $"创建网络配置失败: {ex.Message}", + "INTERNAL_ERROR", + System.Net.HttpStatusCode.InternalServerError); + } } } } \ No newline at end of file diff --git a/CoreAgent.Application/Handlers/NetworkConfig/Commands/DeleteNetworkConfigurationCommandHandler.cs b/CoreAgent.Application/Handlers/NetworkConfig/Commands/DeleteNetworkConfigurationCommandHandler.cs index 6b8f2d9..55f47c9 100644 --- a/CoreAgent.Application/Handlers/NetworkConfig/Commands/DeleteNetworkConfigurationCommandHandler.cs +++ b/CoreAgent.Application/Handlers/NetworkConfig/Commands/DeleteNetworkConfigurationCommandHandler.cs @@ -1,26 +1,33 @@ +using System; using System.Threading; using System.Threading.Tasks; using CoreAgent.Application.Commands.NetworkConfig; using CoreAgent.Domain.Interfaces; +using CoreAgent.Domain.Models.Common; using MediatR; +using Microsoft.Extensions.Logging; namespace CoreAgent.Application.Handlers.NetworkConfig.Commands { - /// /// 删除网络配置命令处理器 /// - public class DeleteNetworkConfigurationCommandHandler : IRequestHandler + public class DeleteNetworkConfigurationCommandHandler : IRequestHandler> { private readonly INetworkConfigurationService _service; + private readonly ILogger _logger; /// /// 构造函数 /// /// 网络配置服务 - public DeleteNetworkConfigurationCommandHandler(INetworkConfigurationService service) + /// 日志记录器 + public DeleteNetworkConfigurationCommandHandler( + INetworkConfigurationService service, + ILogger logger) { _service = service; + _logger = logger; } /// @@ -29,10 +36,36 @@ namespace CoreAgent.Application.Handlers.NetworkConfig.Commands /// 删除网络配置命令 /// 取消令牌 /// 操作结果 - public async Task Handle(DeleteNetworkConfigurationCommand request, CancellationToken cancellationToken) + public async Task> Handle(DeleteNetworkConfigurationCommand request, CancellationToken cancellationToken) { - await _service.DeleteAsync(request.ConfigKey); - return Unit.Value; + try + { + _logger.LogInformation("正在删除网络配置: {ConfigKey}", request.ConfigKey); + + var result = await _service.DeleteAsync(request.ConfigKey); + + if (result) + { + _logger.LogInformation("网络配置删除成功: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Ok(true, "网络配置删除成功"); + } + else + { + _logger.LogWarning("网络配置删除失败,未找到配置: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Error( + "未找到要删除的网络配置", + "CONFIG_NOT_FOUND", + System.Net.HttpStatusCode.NotFound); + } + } + catch (Exception ex) + { + _logger.LogError(ex, "删除网络配置失败: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Error( + $"删除网络配置失败: {ex.Message}", + "INTERNAL_ERROR", + System.Net.HttpStatusCode.InternalServerError); + } } } } \ No newline at end of file diff --git a/CoreAgent.Application/Handlers/NetworkConfig/Commands/GetAllNetworkConfigurationsQueryHandler.cs b/CoreAgent.Application/Handlers/NetworkConfig/Commands/GetAllNetworkConfigurationsQueryHandler.cs new file mode 100644 index 0000000..460c60a --- /dev/null +++ b/CoreAgent.Application/Handlers/NetworkConfig/Commands/GetAllNetworkConfigurationsQueryHandler.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using CoreAgent.Application.Commands.NetworkConfig; +using CoreAgent.Domain.Entities; +using CoreAgent.Domain.Interfaces; +using CoreAgent.Domain.Models.Common; +using MediatR; +using Microsoft.Extensions.Logging; + +namespace CoreAgent.Application.Handlers.NetworkConfig.Commands +{ + /// + /// 获取所有网络配置查询处理器 + /// + public class GetAllNetworkConfigurationsQueryHandler : IRequestHandler>> + { + private readonly INetworkConfigurationService _service; + private readonly ILogger _logger; + + /// + /// 构造函数 + /// + /// 网络配置服务 + /// 日志记录器 + public GetAllNetworkConfigurationsQueryHandler( + INetworkConfigurationService service, + ILogger logger) + { + _service = service; + _logger = logger; + } + + /// + /// 处理获取所有网络配置查询 + /// + /// 获取所有网络配置查询 + /// 取消令牌 + /// 网络配置列表 + public async Task>> Handle(GetAllNetworkConfigurationsQuery request, CancellationToken cancellationToken) + { + try + { + _logger.LogInformation("正在获取所有网络配置"); + + var configurations = await _service.GetAllAsync(); + + _logger.LogInformation("成功获取所有网络配置,共 {Count} 条记录", configurations.Count); + return ApiActionResult>.Ok(configurations, "成功获取所有网络配置"); + } + catch (Exception ex) + { + _logger.LogError(ex, "获取所有网络配置失败"); + return ApiActionResult>.Error( + $"获取所有网络配置失败: {ex.Message}", + "INTERNAL_ERROR", + System.Net.HttpStatusCode.InternalServerError); + } + } + } +} \ No newline at end of file diff --git a/CoreAgent.Application/Handlers/NetworkConfig/Commands/GetNetworkConfigurationByKeyQueryHandler.cs b/CoreAgent.Application/Handlers/NetworkConfig/Commands/GetNetworkConfigurationByKeyQueryHandler.cs new file mode 100644 index 0000000..88d2e92 --- /dev/null +++ b/CoreAgent.Application/Handlers/NetworkConfig/Commands/GetNetworkConfigurationByKeyQueryHandler.cs @@ -0,0 +1,69 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using CoreAgent.Application.Commands.NetworkConfig; +using CoreAgent.Domain.Entities; +using CoreAgent.Domain.Interfaces; +using CoreAgent.Domain.Models.Common; +using MediatR; +using Microsoft.Extensions.Logging; + +namespace CoreAgent.Application.Handlers.NetworkConfig.Commands +{ + /// + /// 根据配置键获取网络配置查询处理器 + /// + public class GetNetworkConfigurationByKeyQueryHandler : IRequestHandler> + { + private readonly INetworkConfigurationService _service; + private readonly ILogger _logger; + + /// + /// 构造函数 + /// + /// 网络配置服务 + /// 日志记录器 + public GetNetworkConfigurationByKeyQueryHandler( + INetworkConfigurationService service, + ILogger logger) + { + _service = service; + _logger = logger; + } + + /// + /// 处理根据配置键获取网络配置查询 + /// + /// 根据配置键获取网络配置查询 + /// 取消令牌 + /// 网络配置 + public async Task> Handle(GetNetworkConfigurationByKeyQuery request, CancellationToken cancellationToken) + { + try + { + _logger.LogInformation("正在获取网络配置: {ConfigKey}", request.ConfigKey); + + var configuration = await _service.GetByConfigKeyAsync(request.ConfigKey); + if (configuration == null) + { + _logger.LogWarning("未找到网络配置: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Error( + $"未找到网络配置: {request.ConfigKey}", + "CONFIG_NOT_FOUND", + System.Net.HttpStatusCode.NotFound); + } + + _logger.LogInformation("成功获取网络配置: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Ok(configuration, "成功获取网络配置"); + } + catch (Exception ex) + { + _logger.LogError(ex, "获取网络配置失败: {ConfigKey}", request.ConfigKey); + return ApiActionResult.Error( + $"获取网络配置失败: {ex.Message}", + "INTERNAL_ERROR", + System.Net.HttpStatusCode.InternalServerError); + } + } + } +} \ No newline at end of file diff --git a/CoreAgent.Application/Handlers/NetworkConfig/Queries/GetNetworkConfigurationQueryHandler.cs b/CoreAgent.Application/Handlers/NetworkConfig/Queries/GetNetworkConfigurationQueryHandler.cs deleted file mode 100644 index ecc4d04..0000000 --- a/CoreAgent.Application/Handlers/NetworkConfig/Queries/GetNetworkConfigurationQueryHandler.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using CoreAgent.Application.Queries.NetworkConfig; -using CoreAgent.Domain.Entities; -using CoreAgent.Domain.Interfaces; -using MediatR; - -namespace CoreAgent.Application.Handlers.NetworkConfig.Queries -{ - /// - /// 获取所有网络配置查询处理器 - /// - public class GetAllNetworkConfigurationsQueryHandler : IRequestHandler> - { - private readonly INetworkConfigurationService _service; - - /// - /// 构造函数 - /// - /// 网络配置服务 - public GetAllNetworkConfigurationsQueryHandler(INetworkConfigurationService service) - { - _service = service; - } - - /// - /// 处理获取所有网络配置查询 - /// - /// 获取所有网络配置查询 - /// 取消令牌 - /// 网络配置列表 - public Task> Handle(GetAllNetworkConfigurationsQuery request, CancellationToken cancellationToken) - { - return _service.GetAllAsync(); - } - } - - /// - /// 根据配置键获取网络配置查询处理器 - /// - public class GetNetworkConfigurationByKeyQueryHandler : IRequestHandler - { - private readonly INetworkConfigurationService _service; - - /// - /// 构造函数 - /// - /// 网络配置服务 - public GetNetworkConfigurationByKeyQueryHandler(INetworkConfigurationService service) - { - _service = service; - } - - /// - /// 处理根据配置键获取网络配置查询 - /// - /// 根据配置键获取网络配置查询 - /// 取消令牌 - /// 网络配置 - public Task Handle(GetNetworkConfigurationByKeyQuery request, CancellationToken cancellationToken) - { - return _service.GetByConfigKeyAsync(request.ConfigKey); - } - } -} \ No newline at end of file diff --git a/CoreAgent.Application/Interfaces/INetworkConfigurationService.cs b/CoreAgent.Application/Interfaces/INetworkConfigurationService.cs deleted file mode 100644 index 1a024c4..0000000 --- a/CoreAgent.Application/Interfaces/INetworkConfigurationService.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using CoreAgent.Domain.Entities; - -namespace CoreAgent.Application.Interfaces -{ - /// - /// 网络配置服务接口 - /// - public interface INetworkConfigurationService - { - /// - /// 创建网络配置 - /// - /// 配置键值 - /// RAN配置文件路径 - /// 核心网和IMS配置列表 - /// APN配置 - /// 频段配置 - /// 配置说明 - /// 创建的网络配置 - Task CreateAsync( - string configKey, - string ragConfig, - List coreOrImsConfigs, - string apn, - List band, - string comment = null); - - /// - /// 保存网络配置 - /// - /// 网络配置 - Task SaveAsync(NetworkConfiguration configuration); - - /// - /// 删除网络配置 - /// - /// 配置键值 - Task DeleteAsync(string configKey); - - /// - /// 获取所有网络配置 - /// - /// 网络配置列表 - Task> GetAllAsync(); - - /// - /// 根据配置键获取网络配置 - /// - /// 配置键值 - /// 网络配置 - Task GetByConfigKeyAsync(string configKey); - } -} \ No newline at end of file diff --git a/CoreAgent.Application/Queries/NetworkConfig/GetNetworkConfigurationQuery.cs b/CoreAgent.Application/Queries/NetworkConfig/GetNetworkConfigurationQuery.cs deleted file mode 100644 index 8a86275..0000000 --- a/CoreAgent.Application/Queries/NetworkConfig/GetNetworkConfigurationQuery.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; -using CoreAgent.Domain.Entities; -using MediatR; - -namespace CoreAgent.Application.Queries.NetworkConfig -{ - /// - /// 获取所有网络配置查询 - /// - public class GetAllNetworkConfigurationsQuery : IRequest> - { - } - - /// - /// 根据配置键获取网络配置查询 - /// - public class GetNetworkConfigurationByKeyQuery : IRequest - { - /// - /// 配置键值 - /// - public string ConfigKey { get; set; } - } -} \ No newline at end of file diff --git a/CoreAgent.Domain/Interfaces/INetworkConfigurationRepository.cs b/CoreAgent.Domain/Interfaces/INetworkConfigurationRepository.cs index 5eca0e1..55eedf4 100644 --- a/CoreAgent.Domain/Interfaces/INetworkConfigurationRepository.cs +++ b/CoreAgent.Domain/Interfaces/INetworkConfigurationRepository.cs @@ -31,13 +31,15 @@ namespace CoreAgent.Domain.Interfaces /// 保存网络配置 /// /// 网络配置 - Task SaveAsync(NetworkConfiguration configuration); + /// 保存是否成功 + Task SaveAsync(NetworkConfiguration configuration); /// /// 删除网络配置 /// /// 配置键值 - Task DeleteAsync(string configKey); + /// 删除是否成功 + Task DeleteAsync(string configKey); /// /// 获取所有网络配置 diff --git a/CoreAgent.Domain/Interfaces/INetworkConfigurationService.cs b/CoreAgent.Domain/Interfaces/INetworkConfigurationService.cs index 20147b1..32f9f03 100644 --- a/CoreAgent.Domain/Interfaces/INetworkConfigurationService.cs +++ b/CoreAgent.Domain/Interfaces/INetworkConfigurationService.cs @@ -18,8 +18,8 @@ namespace CoreAgent.Domain.Interfaces /// APN配置 /// 频段配置 /// 配置说明 - /// 创建的网络配置 - Task CreateAsync( + /// (是否成功, 创建的网络配置) + Task<(bool Success, NetworkConfiguration Configuration)> CreateAsync( string configKey, string ragConfig, List coreOrImsConfigs, @@ -31,13 +31,15 @@ namespace CoreAgent.Domain.Interfaces /// 保存网络配置 /// /// 网络配置 - Task SaveAsync(NetworkConfiguration configuration); + /// 保存是否成功 + Task SaveAsync(NetworkConfiguration configuration); /// /// 删除网络配置 /// /// 配置键值 - Task DeleteAsync(string configKey); + /// 删除是否成功 + Task DeleteAsync(string configKey); /// /// 获取所有网络配置 diff --git a/CoreAgent.Domain/Interfaces/Network/ICellularNetworkService.cs b/CoreAgent.Domain/Interfaces/Network/ICellularNetworkService.cs index 451763e..38c8925 100644 --- a/CoreAgent.Domain/Interfaces/Network/ICellularNetworkService.cs +++ b/CoreAgent.Domain/Interfaces/Network/ICellularNetworkService.cs @@ -18,5 +18,5 @@ public interface ICellularNetworkService /// 停止蜂窝网络 /// /// 停止结果 - Task StopAsync(); + Task StopAsync(string Key); } \ No newline at end of file diff --git a/CoreAgent.Infrastructure/Repositories/NetworkConfigurationRepository.cs b/CoreAgent.Infrastructure/Repositories/NetworkConfigurationRepository.cs index 60d06f8..3c30495 100644 --- a/CoreAgent.Infrastructure/Repositories/NetworkConfigurationRepository.cs +++ b/CoreAgent.Infrastructure/Repositories/NetworkConfigurationRepository.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using CoreAgent.Domain.Entities; using CoreAgent.Domain.Interfaces; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; namespace CoreAgent.Infrastructure.Repositories { @@ -17,6 +18,7 @@ namespace CoreAgent.Infrastructure.Repositories { private static readonly object _lock = new object(); private readonly string _configFilePath; + private readonly ILogger _logger; private static readonly JsonSerializerOptions _jsonOptions = new() { PropertyNameCaseInsensitive = true, @@ -29,8 +31,10 @@ namespace CoreAgent.Infrastructure.Repositories /// 构造函数 /// /// 配置 - public NetworkConfigurationRepository(IConfiguration configuration) + /// 日志记录器 + public NetworkConfigurationRepository(IConfiguration configuration, ILogger logger) { + _logger = logger; var basePath = AppDomain.CurrentDomain.BaseDirectory; _configFilePath = Path.Combine(basePath, "Configurations", "NetworkConfig.json"); @@ -69,46 +73,80 @@ namespace CoreAgent.Infrastructure.Repositories /// /// 保存网络配置 /// - public async Task SaveAsync(NetworkConfiguration configuration) + public async Task SaveAsync(NetworkConfiguration configuration) { if (configuration == null) { + _logger.LogError("保存网络配置失败:配置对象为空"); throw new ArgumentNullException(nameof(configuration)); } - var configs = await GetAllAsync(); - var existingConfig = configs.FirstOrDefault(c => c.ConfigKey == configuration.ConfigKey); - - if (existingConfig != null) + try { - var index = configs.IndexOf(existingConfig); - configs[index] = configuration; + _logger.LogInformation("开始保存网络配置,配置键:{ConfigKey}", configuration.ConfigKey); + + var configs = await GetAllAsync(); + var existingConfig = configs.FirstOrDefault(c => c.ConfigKey == configuration.ConfigKey); + + if (existingConfig != null) + { + _logger.LogInformation("更新已存在的网络配置,配置键:{ConfigKey}", configuration.ConfigKey); + var index = configs.IndexOf(existingConfig); + configs[index] = configuration; + } + else + { + _logger.LogInformation("添加新的网络配置,配置键:{ConfigKey}", configuration.ConfigKey); + configs.Add(configuration); + } + + await SaveConfigurationsAsync(configs); + _logger.LogInformation("网络配置保存成功,配置键:{ConfigKey}", configuration.ConfigKey); + return true; } - else + catch (Exception ex) { - configs.Add(configuration); + _logger.LogError(ex, "保存网络配置失败,配置键:{ConfigKey},错误信息:{ErrorMessage}", + configuration.ConfigKey, ex.Message); + return false; } - - await SaveConfigurationsAsync(configs); } /// /// 删除网络配置 /// - public async Task DeleteAsync(string configKey) + public async Task DeleteAsync(string configKey) { if (string.IsNullOrEmpty(configKey)) { + _logger.LogError("删除网络配置失败:配置键为空"); throw new ArgumentException("配置键值不能为空", nameof(configKey)); } - var configs = await GetAllAsync(); - var config = configs.FirstOrDefault(c => c.ConfigKey == configKey); - - if (config != null) + try { - configs.Remove(config); - await SaveConfigurationsAsync(configs); + _logger.LogInformation("开始删除网络配置,配置键:{ConfigKey}", configKey); + + var configs = await GetAllAsync(); + var config = configs.FirstOrDefault(c => c.ConfigKey == configKey); + + if (config != null) + { + _logger.LogInformation("找到要删除的网络配置,配置键:{ConfigKey}", configKey); + configs.Remove(config); + await SaveConfigurationsAsync(configs); + _logger.LogInformation("网络配置删除成功,配置键:{ConfigKey}", configKey); + return true; + } + + _logger.LogWarning("未找到要删除的网络配置,配置键:{ConfigKey}", configKey); + return false; + } + catch (Exception ex) + { + _logger.LogError(ex, "删除网络配置失败,配置键:{ConfigKey},错误信息:{ErrorMessage}", + configKey, ex.Message); + return false; } } diff --git a/CoreAgent.Infrastructure/Services/Network/CellularNetworkService.cs b/CoreAgent.Infrastructure/Services/Network/CellularNetworkService.cs index 5bbb212..3790c15 100644 --- a/CoreAgent.Infrastructure/Services/Network/CellularNetworkService.cs +++ b/CoreAgent.Infrastructure/Services/Network/CellularNetworkService.cs @@ -134,7 +134,7 @@ public class CellularNetworkService : ICellularNetworkService } } - public async Task StopAsync() + public async Task StopAsync(string Key) { string neConfigKey = _context.GetNeConfigKey(); try diff --git a/CoreAgent.Infrastructure/Services/NetworkConfigurationService.cs b/CoreAgent.Infrastructure/Services/NetworkConfigurationService.cs index 5ff66df..7af9ba6 100644 --- a/CoreAgent.Infrastructure/Services/NetworkConfigurationService.cs +++ b/CoreAgent.Infrastructure/Services/NetworkConfigurationService.cs @@ -1,7 +1,9 @@ +using System; using System.Collections.Generic; using System.Threading.Tasks; using CoreAgent.Domain.Entities; using CoreAgent.Domain.Interfaces; +using Microsoft.Extensions.Logging; namespace CoreAgent.Infrastructure.Services { @@ -11,20 +13,25 @@ namespace CoreAgent.Infrastructure.Services public class NetworkConfigurationService : INetworkConfigurationService { private readonly INetworkConfigurationRepository _repository; + private readonly ILogger _logger; /// /// 构造函数 /// /// 网络配置仓储 - public NetworkConfigurationService(INetworkConfigurationRepository repository) + /// 日志记录器 + public NetworkConfigurationService( + INetworkConfigurationRepository repository, + ILogger logger) { _repository = repository; + _logger = logger; } /// /// 创建网络配置 /// - public Task CreateAsync( + public async Task<(bool Success, NetworkConfiguration Configuration)> CreateAsync( string configKey, string ragConfig, List coreOrImsConfigs, @@ -32,13 +39,42 @@ namespace CoreAgent.Infrastructure.Services List band, string comment = null) { - return _repository.CreateAsync(configKey, ragConfig, coreOrImsConfigs, apn, band, comment); + try + { + _logger.LogInformation("开始创建网络配置,配置键:{ConfigKey}", configKey); + _logger.LogDebug("创建网络配置参数 - RAN配置:{RagConfig}, APN:{Apn}, 频段:{Band}, 说明:{Comment}", + ragConfig, apn, string.Join(",", band), comment); + + // 检查配置键是否已存在 + _logger.LogInformation("检查配置键是否存在:{ConfigKey}", configKey); + var existingConfig = await _repository.GetByConfigKeyAsync(configKey); + if (existingConfig != null) + { + _logger.LogWarning("配置键已存在,创建失败:{ConfigKey}", configKey); + return (false, null); + } + + _logger.LogInformation("开始创建新的网络配置:{ConfigKey}", configKey); + var config = await _repository.CreateAsync(configKey, ragConfig, coreOrImsConfigs, apn, band, comment); + + _logger.LogInformation("网络配置创建成功:{ConfigKey}", configKey); + _logger.LogDebug("网络配置详情 - RAN配置:{RagConfig}, APN:{Apn}, 频段:{Band}, 说明:{Comment}", + config.RagConfig, config.Apn, string.Join(",", config.Band), config.Comment); + + return (true, config); + } + catch (Exception ex) + { + _logger.LogError(ex, "创建网络配置失败,配置键:{ConfigKey},错误信息:{ErrorMessage}", + configKey, ex.Message); + return (false, null); + } } /// /// 保存网络配置 /// - public Task SaveAsync(NetworkConfiguration configuration) + public Task SaveAsync(NetworkConfiguration configuration) { return _repository.SaveAsync(configuration); } @@ -46,7 +82,7 @@ namespace CoreAgent.Infrastructure.Services /// /// 删除网络配置 /// - public Task DeleteAsync(string configKey) + public Task DeleteAsync(string configKey) { return _repository.DeleteAsync(configKey); }