fix: align rule rollback version resolution

This commit is contained in:
wren
2026-05-07 10:58:42 +08:00
parent 7cf551018b
commit 75c2111209
2 changed files with 7 additions and 8 deletions
@@ -127,12 +127,10 @@ class RuleConfigServiceImpl(IRuleConfigService):
resolved_version_id = current_version_id or fallback_version_id
has_usable_version = bool(rule_set_meta.get("has_usable_version"))
usable_rule_count = int(rule_set_meta.get("usable_rule_count") or 0)
latest_version_id = await self._load_latest_version_id(rule_set_id)
latest_version_seq = await self._load_version_seq_by_id(latest_version_id)
resolved_version_seq = await self._load_version_seq_by_id(resolved_version_id)
if latest_version_id is not None and (resolved_version_id is None or latest_version_seq > resolved_version_seq):
# 规则详情页优先读取最新草稿;上传运行仍以 current/fallback 的可用版本为准。
resolved_version_id = latest_version_id
if resolved_version_id is None:
# 仅在当前没有生效版本时,才回退到最新版本(通常是草稿)。
# 否则规则详情页必须与当前生效版本保持一致,发布/回滚后才能看到真实内容切换。
resolved_version_id = await self._load_latest_version_id(rule_set_id)
if resolved_version_id is not None:
yaml_text = await self._load_yaml_text_by_version_id(resolved_version_id)
source_status = "ready" if yaml_text.strip() else "missing"
@@ -54,12 +54,13 @@ class RuleServiceImpl(IRuleService):
FROM leaudit_rule_sets rs
LEFT JOIN leaudit_rule_versions current_rv
ON current_rv.id = rs.current_version_id
AND current_rv.status IN ('published', 'rollback')
AND current_rv.status = 'published'
LEFT JOIN LATERAL (
SELECT rv.id
FROM leaudit_rule_versions rv
WHERE rv.rule_set_id = rs.id
AND rv.status IN ('published', 'rollback')
AND rv.status = 'published'
AND (rs.current_version_id IS NULL OR rv.id <> rs.current_version_id)
ORDER BY rv.version_seq DESC, rv.id DESC
LIMIT 1
) fallback_rv ON TRUE