feat: GET /configs/{siteId}/script 无版本号取最新脚本+默认模板回退

This commit is contained in:
mediabot-pt
2026-07-01 16:20:44 +08:00
parent 9603a9da69
commit 85f63ad5ec

View File

@@ -3,6 +3,8 @@ package com.par.api.controller;
import com.par.core.dto.ApiResponse;
import com.par.core.dto.SiteConfigDTO;
import com.par.core.entity.SiteConfig;
import com.par.core.adapter.GroovyScriptEngine;
import com.par.core.mapper.SiteMapper;
import com.par.core.service.ConfigService;
import com.par.core.storage.CachedStorageService;
import jakarta.servlet.http.HttpServletRequest;
@@ -25,6 +27,7 @@ public class ConfigController {
private final ConfigService configService;
private final CachedStorageService storageService;
private final SiteMapper siteMapper;
public ConfigController(ConfigService configService, CachedStorageService storageService) {
this.configService = configService;
@@ -117,6 +120,38 @@ public class ConfigController {
.body(content);
}
/**
* 下载最新版本 Groovy 脚本(供 mediabot 使用)
* 优先自定义脚本,无自定义则返回站点类型默认模板
*/
@GetMapping("/{siteId}/script")
public ResponseEntity<String> downloadLatestScript(@PathVariable("siteId") String siteId) {
// 1. 尝试最新自定义脚本
SiteConfig latest = configService.getLatestConfig(siteId);
if (latest != null && latest.getScriptStoragePath() != null && !latest.getScriptStoragePath().isBlank()) {
try {
String script = storageService.read(latest.getScriptStoragePath());
if (script != null && !script.isBlank()) {
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, "text/plain;charset=UTF-8")
.body(script);
}
} catch (Exception ignored) {}
}
// 2. 回退到站点类型默认脚本
var site = siteMapper.selectBySiteId(siteId);
String siteType = site != null && site.getSiteType() != null ? site.getSiteType().getValue() : null;
String defaultScript = GroovyScriptEngine.loadDefaultByType(siteType);
if (defaultScript != null) {
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, "text/plain;charset=UTF-8")
.body(defaultScript);
}
return ResponseEntity.notFound().build();
}
/**
* 下载指定版本 Groovy 脚本(供 mediabot 使用)
*/