feat: 站点编辑加发布按钮生成manifest上传七牛云
This commit is contained in:
@@ -337,6 +337,21 @@ public class AdminController {
|
||||
|
||||
// ===================== 站点审核 =====================
|
||||
|
||||
/** 发布站点配置到七牛云(生成 manifest/manifest.json) */
|
||||
@PostMapping("/sites/publish")
|
||||
public ApiResponse<Map<String,Object>> publishManifest(HttpServletRequest request) {
|
||||
checkAdmin(request);
|
||||
try {
|
||||
var manifest = buildManifest();
|
||||
String json = new com.fasterxml.jackson.databind.ObjectMapper()
|
||||
.writerWithDefaultPrettyPrinter().writeValueAsString(manifest);
|
||||
storageService.store("manifest/manifest.json", json);
|
||||
log.info("Manifest published: {} sites", ((List<?>)manifest.get("sites")).size());
|
||||
return ApiResponse.success(Map.of("version", manifest.get("version"),
|
||||
"sites", ((List<?>)manifest.get("sites")).size()));
|
||||
} catch (Exception e) { return ApiResponse.error(500, "发布失败: " + e.getMessage()); }
|
||||
}
|
||||
|
||||
@GetMapping("/sites")
|
||||
public ApiResponse<List<com.par.core.dto.SiteDTO>> listAllSites(HttpServletRequest request) {
|
||||
checkAdmin(request);
|
||||
@@ -505,6 +520,43 @@ public class AdminController {
|
||||
catch (Exception e) { return java.util.List.of(); }
|
||||
}
|
||||
|
||||
// buildManifest = 复用 ManifestController 逻辑
|
||||
@SuppressWarnings("unchecked")
|
||||
private Map<String, Object> buildManifest() {
|
||||
var sites = siteService.listAllSites();
|
||||
List<Map<String,Object>> list = new ArrayList<>();
|
||||
int total = 0;
|
||||
for (var site : sites) {
|
||||
var dto = siteService.toDTO(site);
|
||||
Map<String,Object> e = new LinkedHashMap<>();
|
||||
e.put("siteId", site.getSiteId());
|
||||
e.put("names", dto.getNames());
|
||||
e.put("urls", dto.getUrls());
|
||||
e.put("tags", dto.getTags());
|
||||
e.put("description", dto.getDescription());
|
||||
e.put("siteType", site.getSiteType() != null ? site.getSiteType().getValue() : null);
|
||||
e.put("status", site.getStatus() != null ? site.getStatus().getValue() : null);
|
||||
e.put("version", site.getVersion() != null ? site.getVersion() : 1);
|
||||
var latest = siteConfigMapper.selectLatestBySiteId(site.getSiteId());
|
||||
e.put("latestVersion", latest != null ? latest.getVersion() : null);
|
||||
e.put("hasScript", latest != null && latest.getScriptStoragePath() != null && !latest.getScriptStoragePath().isBlank());
|
||||
e.put("hasPages", sitePagesMapper.selectCount(
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.par.core.entity.SitePages>()
|
||||
.eq(com.par.core.entity.SitePages::getSiteId, site.getSiteId())
|
||||
.eq(com.par.core.entity.SitePages::getDeleted, 0)) > 0);
|
||||
e.put("hasRisk", riskRuleMapper.selectCount(
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.par.core.entity.RiskRule>()
|
||||
.eq(com.par.core.entity.RiskRule::getSiteType, site.getSiteType().getValue())
|
||||
.eq(com.par.core.entity.RiskRule::getDeleted, 0)) > 0);
|
||||
total += (site.getVersion() != null ? site.getVersion() : 1);
|
||||
list.add(e);
|
||||
}
|
||||
Map<String,Object> m = new LinkedHashMap<>();
|
||||
m.put("version", total);
|
||||
m.put("sites", list);
|
||||
return m;
|
||||
}
|
||||
|
||||
private void checkAdmin(HttpServletRequest request) {
|
||||
TrustLevel level = (TrustLevel) request.getAttribute("trustLevel");
|
||||
if (level == null || level != TrustLevel.ADMIN) {
|
||||
|
||||
Reference in New Issue
Block a user