feat: 新增用户端配置获取和批量更新接口

主要修改:
1. 在SystemConfigController中新增获取用户端配置的接口。
2. 实现批量更新系统配置的接口,支持根据配置键进行更新。
3. 增强SystemConfigService,添加用户端相关配置的获取方法及配置值验证逻辑。

技术细节:
- 新增的接口提升了系统配置管理的灵活性,支持批量操作和用户端配置的动态获取。
This commit is contained in:
zyh
2025-08-27 17:20:35 +08:00
parent 01bc703ea2
commit 429e12cf50
8 changed files with 472 additions and 42 deletions

View File

@@ -5,6 +5,7 @@ import com.gameplatform.server.model.entity.admin.SystemConfig;
import com.gameplatform.server.model.dto.admin.SystemConfigRequest;
import com.gameplatform.server.model.dto.admin.SystemConfigResponse;
import com.gameplatform.server.model.dto.admin.SystemConfigConverter;
import com.gameplatform.server.model.dto.admin.BatchSystemConfigRequest;
import com.gameplatform.server.service.admin.SystemConfigService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -13,6 +14,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.ArrayList;
@RestController
@RequestMapping("/api/admin/config")
@@ -117,4 +119,93 @@ public class SystemConfigController {
public final String qrPathTemplate = systemConfigService.getQrPathTemplate();
});
}
@GetMapping("/user/config")
@Operation(summary = "获取用户端配置", description = "获取用户端相关配置")
public ResponseEntity<Object> getUserConfig() {
return ResponseEntity.ok(new Object() {
public final Integer qrExpireSeconds = systemConfigService.getUserQrExpireSeconds();
public final Integer refreshWaitSeconds = systemConfigService.getUserRefreshWaitSeconds();
public final Integer linkExpireHours = systemConfigService.getUserLinkExpireHours();
public final String assetsBaseUrl = systemConfigService.getUserAssetsBaseUrl();
});
}
@PostMapping("/batch")
@Operation(summary = "批量更新配置", description = "批量更新系统配置,支持根据配置键更新")
public ResponseEntity<Object> batchUpdateConfigs(@RequestBody BatchSystemConfigRequest request) {
if (request.getConfigs() == null || request.getConfigs().isEmpty()) {
return ResponseEntity.badRequest().body(new Object() {
public final boolean success = false;
public final String message = "配置列表不能为空";
});
}
List<SystemConfig> configs = new ArrayList<>();
List<String> validationErrors = new ArrayList<>();
for (BatchSystemConfigRequest.SystemConfigUpdateItem item : request.getConfigs()) {
// 验证配置值
if (item.getConfigType() != null && item.getConfigValue() != null) {
if (!systemConfigService.validateConfigValue(item.getConfigType(), item.getConfigValue())) {
validationErrors.add("配置键 " + item.getConfigKey() + " 的值格式不正确");
continue;
}
}
SystemConfig config = new SystemConfig();
config.setConfigKey(item.getConfigKey());
config.setConfigValue(item.getConfigValue());
config.setConfigType(item.getConfigType());
config.setDescription(item.getDescription());
configs.add(config);
}
if (!validationErrors.isEmpty()) {
return ResponseEntity.badRequest().body(new Object() {
public final boolean success = false;
public final String message = "配置验证失败";
public final List<String> errors = validationErrors;
});
}
boolean success = systemConfigService.updateConfigs(configs);
final boolean finalSuccess = success;
final int finalUpdatedCount = configs.size();
return ResponseEntity.ok(new Object() {
public final boolean success = finalSuccess;
public final String message = finalSuccess ? "批量更新成功" : "批量更新失败";
public final int updatedCount = finalUpdatedCount;
});
}
@PutMapping("/key/{configKey}")
@Operation(summary = "根据键更新配置值", description = "根据配置键快速更新配置值")
public ResponseEntity<Object> updateConfigByKey(
@PathVariable String configKey,
@RequestBody String configValue) {
// 先获取现有配置以验证类型
SystemConfig existingConfig = systemConfigService.getConfigByKey(configKey);
if (existingConfig == null) {
return ResponseEntity.notFound().build();
}
// 验证配置值格式
if (!systemConfigService.validateConfigValue(existingConfig.getConfigType(), configValue)) {
return ResponseEntity.badRequest().body(new Object() {
public final boolean success = false;
public final String message = "配置值格式不正确,期望类型: " + existingConfig.getConfigType();
});
}
boolean success = systemConfigService.updateConfigValueByKey(configKey, configValue);
final boolean finalSuccess = success;
return ResponseEntity.ok(new Object() {
public final boolean success = finalSuccess;
public final String message = finalSuccess ? "更新成功" : "更新失败";
});
}
}