feat: add rule draft permission flow

This commit is contained in:
wren
2026-05-06 20:06:41 +08:00
parent 0b76dce2a5
commit f9de903acc
8 changed files with 412 additions and 14 deletions
@@ -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