feat: config 字段改为可选,只传 script 即可提交纯Groovy适配

This commit is contained in:
mediabot-pt
2026-07-01 10:47:19 +08:00
parent d35c5e90c9
commit dcba64096e
2 changed files with 21 additions and 13 deletions

View File

@@ -154,8 +154,11 @@ public class ConfigController {
String schemaVersion = (String) payload.get("schemaVersion"); String schemaVersion = (String) payload.get("schemaVersion");
String groovyScript = (String) payload.get("script"); String groovyScript = (String) payload.get("script");
if (version == null || configJson == null) { if (version == null) {
return ApiResponse.error(400, "version and config are required"); return ApiResponse.error(400, "version is required");
}
if ((configJson == null || configJson.isBlank()) && (groovyScript == null || groovyScript.isBlank())) {
return ApiResponse.error(400, "config 或 script 至少需要一个");
} }
Long submitterId = (Long) request.getAttribute("accountId"); Long submitterId = (Long) request.getAttribute("accountId");

View File

@@ -56,8 +56,10 @@ public class ConfigServiceImpl implements ConfigService {
@Override @Override
public SiteConfig submitConfig(String siteId, String version, String configJson, public SiteConfig submitConfig(String siteId, String version, String configJson,
String schemaVersion, String groovyScript, Long submitterId) { String schemaVersion, String groovyScript, Long submitterId) {
String configHash = HmacUtil.sha256(configJson); boolean hasConfig = configJson != null && !configJson.isBlank();
String storagePath = String.format("configs/%s/pending/%s.json", siteId, configHash.substring(0, 8)); boolean hasScript = groovyScript != null && !groovyScript.isBlank();
String configHash = hasConfig ? HmacUtil.sha256(configJson) : HmacUtil.sha256(groovyScript);
String idPrefix = hasConfig ? configHash.substring(0, 8) : Long.toHexString(System.currentTimeMillis());
// 相同 hash 的提交 → 真正重复,跳过 // 相同 hash 的提交 → 真正重复,跳过
SiteConfig sameHash = siteConfigMapper.selectOne( SiteConfig sameHash = siteConfigMapper.selectOne(
@@ -70,18 +72,21 @@ public class ConfigServiceImpl implements ConfigService {
return sameHash; return sameHash;
} }
// 存储配置 // 存储 JSON 配置(可选)
try { String storagePath = null;
storageService.store(storagePath, configJson); if (hasConfig) {
} catch (Exception e) { storagePath = String.format("configs/%s/pending/%s.json", siteId, idPrefix);
log.error("存储配置文件失败 siteId={} version={}: {}", siteId, version, e.getMessage()); try { storageService.store(storagePath, configJson); }
throw new RuntimeException("存储配置文件失败: " + e.getMessage(), e); catch (Exception e) {
log.error("存储配置文件失败 siteId={} version={}: {}", siteId, version, e.getMessage());
throw new RuntimeException("存储配置文件失败: " + e.getMessage(), e);
}
} }
// 存储 Groovy 脚本(可选) // 存储 Groovy 脚本
String scriptPath = null; String scriptPath = null;
if (groovyScript != null && !groovyScript.isBlank()) { if (hasScript) {
scriptPath = String.format("configs/%s/pending/%s.groovy", siteId, configHash.substring(0, 8)); scriptPath = String.format("configs/%s/pending/%s.groovy", siteId, idPrefix);
storageService.store(scriptPath, groovyScript); storageService.store(scriptPath, groovyScript);
} }