feat: Manifest全局版本号(站点/页面/规则/脚本任一变则递增)
This commit is contained in:
@@ -37,6 +37,10 @@ public class FlywayConfig {
|
|||||||
"rules_json LONGTEXT NOT NULL, deleted TINYINT NOT NULL DEFAULT 0, " +
|
"rules_json LONGTEXT NOT NULL, deleted TINYINT NOT NULL DEFAULT 0, " +
|
||||||
"created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
"created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
||||||
"INDEX idx_site_type (site_type, deleted)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
"INDEX idx_site_type (site_type, deleted)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||||
|
stmt.execute("CREATE TABLE IF NOT EXISTS manifest_version (" +
|
||||||
|
"id INT PRIMARY KEY DEFAULT 1, version INT NOT NULL DEFAULT 1, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP," +
|
||||||
|
"CHECK (id = 1)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||||
|
stmt.execute("INSERT IGNORE INTO manifest_version (id, version) VALUES (1, 1)");
|
||||||
log.info("V15 tables initialized");
|
log.info("V15 tables initialized");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("V15 migration failed: {}", e.getMessage());
|
log.error("V15 migration failed: {}", e.getMessage());
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import java.util.stream.Collectors;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ManifestController {
|
public class ManifestController {
|
||||||
|
|
||||||
|
private final com.par.core.service.ManifestVersionService versionService;
|
||||||
private final SiteMapper siteMapper;
|
private final SiteMapper siteMapper;
|
||||||
private final SiteConfigMapper siteConfigMapper;
|
private final SiteConfigMapper siteConfigMapper;
|
||||||
private final com.par.core.mapper.SitePagesMapper sitePagesMapper;
|
private final com.par.core.mapper.SitePagesMapper sitePagesMapper;
|
||||||
@@ -88,7 +89,7 @@ public class ManifestController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> manifest = new HashMap<>();
|
Map<String, Object> manifest = new HashMap<>();
|
||||||
manifest.put("version", "1.0");
|
manifest.put("version", versionService.current());
|
||||||
manifest.put("sites", entries);
|
manifest.put("sites", entries);
|
||||||
|
|
||||||
return ResponseEntity.ok().eTag(etag).body(ApiResponse.success(manifest));
|
return ResponseEntity.ok().eTag(etag).body(ApiResponse.success(manifest));
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.par.core.service;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manifest 全局版本号管理
|
||||||
|
* 任何站点/页面/规则/脚本变更时递增,mediabot 据此判断是否需要拉取最新数据
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class ManifestVersionService {
|
||||||
|
|
||||||
|
private final JdbcTemplate jdbc;
|
||||||
|
|
||||||
|
/** 获取当前版本号 */
|
||||||
|
public int current() {
|
||||||
|
Integer v = jdbc.queryForObject("SELECT version FROM manifest_version WHERE id=1", Integer.class);
|
||||||
|
return v != null ? v : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 递增版本号并返回新值 */
|
||||||
|
public int increment() {
|
||||||
|
jdbc.update("UPDATE manifest_version SET version = version + 1, updated_at = NOW() WHERE id=1");
|
||||||
|
return current();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@ import java.util.stream.Collectors;
|
|||||||
@Service
|
@Service
|
||||||
public class ConfigServiceImpl implements ConfigService {
|
public class ConfigServiceImpl implements ConfigService {
|
||||||
|
|
||||||
|
private final ManifestVersionService versionService;
|
||||||
private final SiteConfigMapper siteConfigMapper;
|
private final SiteConfigMapper siteConfigMapper;
|
||||||
private final CachedStorageService storageService;
|
private final CachedStorageService storageService;
|
||||||
|
|
||||||
@@ -71,6 +72,7 @@ public class ConfigServiceImpl implements ConfigService {
|
|||||||
config.setIsLatest(false);
|
config.setIsLatest(false);
|
||||||
|
|
||||||
siteConfigMapper.insert(config);
|
siteConfigMapper.insert(config);
|
||||||
|
versionService.increment();
|
||||||
log.info("Config submitted: siteId={}, version={}, id={}, scriptPath={}", siteId, version, config.getId(), scriptPath);
|
log.info("Config submitted: siteId={}, version={}, id={}, scriptPath={}", siteId, version, config.getId(), scriptPath);
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import java.util.*;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class RiskRuleServiceImpl implements RiskRuleService {
|
public class RiskRuleServiceImpl implements RiskRuleService {
|
||||||
|
|
||||||
|
private final ManifestVersionService versionService;
|
||||||
private final RiskRuleMapper mapper;
|
private final RiskRuleMapper mapper;
|
||||||
private final com.par.core.storage.CachedStorageService storageService;
|
private final com.par.core.storage.CachedStorageService storageService;
|
||||||
private static final ObjectMapper om = new ObjectMapper();
|
private static final ObjectMapper om = new ObjectMapper();
|
||||||
@@ -62,6 +63,7 @@ public class RiskRuleServiceImpl implements RiskRuleService {
|
|||||||
// 存七牛云 + 本地缓存
|
// 存七牛云 + 本地缓存
|
||||||
String storagePath = String.format("rules/%s/v%d.json", siteType, nextVer);
|
String storagePath = String.format("rules/%s/v%d.json", siteType, nextVer);
|
||||||
storageService.store(storagePath, json);
|
storageService.store(storagePath, json);
|
||||||
|
versionService.increment();
|
||||||
log.info("风险规则已保存: siteType={}, version={}, path={}", siteType, nextVer, storagePath);
|
log.info("风险规则已保存: siteType={}, version={}, path={}", siteType, nextVer, storagePath);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("保存风险规则失败 siteType={}", siteType, e);
|
log.error("保存风险规则失败 siteType={}", siteType, e);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import java.util.*;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SitePagesServiceImpl implements SitePagesService {
|
public class SitePagesServiceImpl implements SitePagesService {
|
||||||
|
|
||||||
|
private final ManifestVersionService versionService;
|
||||||
private final SitePagesMapper mapper;
|
private final SitePagesMapper mapper;
|
||||||
private final com.par.core.storage.CachedStorageService storageService;
|
private final com.par.core.storage.CachedStorageService storageService;
|
||||||
private static final ObjectMapper om = new ObjectMapper();
|
private static final ObjectMapper om = new ObjectMapper();
|
||||||
@@ -69,6 +70,7 @@ public class SitePagesServiceImpl implements SitePagesService {
|
|||||||
// 存七牛云 + 本地缓存
|
// 存七牛云 + 本地缓存
|
||||||
String storagePath = String.format("pages/%s/v%s.json", siteId, version);
|
String storagePath = String.format("pages/%s/v%s.json", siteId, version);
|
||||||
storageService.store(storagePath, json);
|
storageService.store(storagePath, json);
|
||||||
|
versionService.increment();
|
||||||
log.info("页面配置已保存: siteId={}, version={}, path={}", siteId, version, storagePath);
|
log.info("页面配置已保存: siteId={}, version={}, path={}", siteId, version, storagePath);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("保存页面配置失败 siteId={}", siteId, e);
|
log.error("保存页面配置失败 siteId={}", siteId, e);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import java.util.stream.Collectors;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SiteServiceImpl implements SiteService {
|
public class SiteServiceImpl implements SiteService {
|
||||||
|
|
||||||
|
private final ManifestVersionService versionService;
|
||||||
private final SiteMapper siteMapper;
|
private final SiteMapper siteMapper;
|
||||||
private final SiteChangeMapper changeMapper;
|
private final SiteChangeMapper changeMapper;
|
||||||
private final SiteConfigMapper siteConfigMapper;
|
private final SiteConfigMapper siteConfigMapper;
|
||||||
@@ -231,6 +232,7 @@ public class SiteServiceImpl implements SiteService {
|
|||||||
try { site.setStatus(SiteStatus.fromValue(status)); } catch (Exception ignored) {}
|
try { site.setStatus(SiteStatus.fromValue(status)); } catch (Exception ignored) {}
|
||||||
}
|
}
|
||||||
siteMapper.updateById(site);
|
siteMapper.updateById(site);
|
||||||
|
versionService.increment();
|
||||||
log.info("站点编辑: siteId={}", siteId);
|
log.info("站点编辑: siteId={}", siteId);
|
||||||
return site;
|
return site;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user