fix: align rule rollback version resolution
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user