using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Haoliang.Core.Services.IServices; namespace Haoliang.Api.Controllers { /// /// 系统配置API控制器 /// [ApiController] [Route("api/v1/[controller]")] public class SystemConfigController : ControllerBase { private readonly Services.ISystemConfigService _systemConfigService; private readonly ILogger _logger; public SystemConfigController(Services.ISystemConfigService systemConfigService, ILogger logger) { _systemConfigService = systemConfigService; _logger = logger; } /// /// 获取所有配置 /// [HttpGet] public async Task GetAllConfigs() { try { var configs = await _systemConfigService.GetAllConfigsAsync(); return Ok(configs); } catch (Exception ex) { _logger.LogError(ex, "获取所有配置失败: {Message}", ex.Message); return StatusCode(500).ObjectResult(new { success = false, message = ex.Message }); } } /// /// �类别获取配置 /// [HttpGet("category/{category}")] public async Task GetConfigsByCategory(string category) { try { var configs = await _systemConfigService.GetConfigsByCategoryAsync(category); return Ok(configs); } catch (Exception ex) { _logger.LogError(ex, "获取配置失败: {Message}", ex.Message); return StatusCode(500).ObjectResult(new { success = false, message = ex.Message }); } } /// /// 获取单个配置 /// [HttpGet("key/{key}")] public async Task GetConfig(string key) { try { var config = await _systemConfigService.GetConfigAsync(key); if (config == null) { return NotFound(new { message = $"配置键 {key} 不存在" }); } return Ok(config); } catch (Exception ex) { _logger.LogError(ex, "获取配置失败: {Message}", ex.Message); return StatusCode(500).ObjectResult(new { success = false, message = ex.Message }); } } /// /// 更新或创建配置 /// [HttpPost] public async Task UpdateConfig([FromBody] ConfigUpdateRequest request) { try { if (string.IsNullOrEmpty(request.Key)) { return BadRequest(new { message = "配置键不能为空" }); } var config = await _systemConfigService.UpdateConfigAsync(request.Key, request.Value, request.UpdatedBy, request.Reason); if (config == null) { return BadRequest(new { message = $"配置创建失败,可能是键 {request.Key} 已存在或类别无效" }); } return Ok(new { success = true, data = config }); } catch (Exception ex) { _logger.LogError(ex, "更新配置失败: {Message}", ex.Message); return StatusCode(500).ObjectResult(new { success = false, message = ex.Message }); } } /// /// 批量更新配置 /// [HttpPost("batch")] public async Task BatchUpdateConfigs([FromBody] Dictionary configs) { try { if (configs == null || !configs.Any()) { return BadRequest(new { message = "配置数据不能为空" }); } var result = await _systemConfigService.UpdateConfigsAsync(configs, "System"); return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "批量更新配置失败: {Message}", ex.Message); return StatusCode(500).ObjectResult(new { success = false, message = ex.Message }); } } /// /// 重置配置为默认值 /// [HttpDelete("key/{key}")] public async Task ResetConfig(string key) { try { var result = await _systemConfigService.ResetConfigAsync(key); if (!result) { return NotFound(new { message = $"配置键 {key} 不存在或无法重置" }); } return Ok(new { success = true }); } catch (Exception ex) { _logger.LogError(ex, "重置配置失败: {Message}", ex.Message); return StatusCode(500).ObjectResult(new { success = false, message = ex.Message }); } } /// /// 启用/禁用配置 /// [HttpPut("enabled/{key}")] public async Task SetConfigEnabled(string key, bool enabled) { try { var result = await _systemConfigService.SetConfigEnabledAsync(key, enabled); if (!result) { return NotFound(new { message = $"配置键 {key} 不存在" }); } return Ok(new { success = true }); } catch (Exception ex) { _logger.LogError(ex, "设置配置启用状态失败: {Message}", ex.Message); return StatusCode(500).ObjectResult(new { success = false, message = ex.Message }); } } /// /// 获取配置变更日志 /// [HttpGet("logs")] public async Task GetLogs([FromQuery] string key, [FromQuery] DateTime? fromTime, [FromQuery] DateTime? toTime) { try { var logs = await _systemConfigService.GetConfigLogsAsync(key, fromTime, toTime); return Ok(logs); } catch (Exception ex) { _logger.LogError(ex, "获取配置日志失败: {Message}", ex.Message); return StatusCode(500).ObjectResult(new { success = false, message = ex.Message }); } } } }