diff --git a/par-api/src/main/java/com/par/api/controller/ConfigController.java b/par-api/src/main/java/com/par/api/controller/ConfigController.java index cebc39d..b9c10ee 100644 --- a/par-api/src/main/java/com/par/api/controller/ConfigController.java +++ b/par-api/src/main/java/com/par/api/controller/ConfigController.java @@ -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 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 使用) */