feat: add rule draft permission flow
This commit is contained in:
@@ -127,6 +127,12 @@ 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 not None:
|
||||
yaml_text = await self._load_yaml_text_by_version_id(resolved_version_id)
|
||||
source_status = "ready" if yaml_text.strip() else "missing"
|
||||
@@ -214,6 +220,44 @@ class RuleConfigServiceImpl(IRuleConfigService):
|
||||
except Exception:
|
||||
return ""
|
||||
|
||||
async def _load_latest_version_id(self, rule_set_id: int) -> int | None:
|
||||
"""在没有可用发布版本时,退回读取最新草稿版本。"""
|
||||
async with GetAsyncSession() as session:
|
||||
row = (
|
||||
await session.execute(
|
||||
text(
|
||||
"""
|
||||
SELECT id
|
||||
FROM leaudit_rule_versions
|
||||
WHERE rule_set_id = :rule_set_id
|
||||
ORDER BY version_seq DESC, id DESC
|
||||
LIMIT 1
|
||||
"""
|
||||
),
|
||||
{"rule_set_id": rule_set_id},
|
||||
)
|
||||
).mappings().first()
|
||||
return self._to_int(row.get("id")) if row else None
|
||||
|
||||
async def _load_version_seq_by_id(self, version_id: int | None) -> int:
|
||||
if version_id is None:
|
||||
return -1
|
||||
async with GetAsyncSession() as session:
|
||||
row = (
|
||||
await session.execute(
|
||||
text(
|
||||
"""
|
||||
SELECT version_seq
|
||||
FROM leaudit_rule_versions
|
||||
WHERE id = :version_id
|
||||
LIMIT 1
|
||||
"""
|
||||
),
|
||||
{"version_id": version_id},
|
||||
)
|
||||
).mappings().first()
|
||||
return int(row.get("version_seq") or -1) if row else -1
|
||||
|
||||
def _to_int(self, value) -> int | None:
|
||||
if value is None:
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user