sync update from LAN repo (source dhk-1 @ 3b1ec5b4)

This commit is contained in:
gozeros committed 2026-11-05 10:56:34 +08:00
1 parent da6521b6cb
commit 264e2200d6
995 files changed
+148105 -13399

No files matched your search

@@ -66,6 +66,8 @@ class RoundtableChainRepository:
"enabled": bool(getattr(row, "enabled", True)),
# 「待审核」标记:True = owner 已提交审核、等待管理员发布;发布时清回 False。
"pending_review": bool(getattr(row, "pending_review", False)),
# 管理员目录开关:True = 从普通列表隐藏(仅管理视图可见);缺省 False。
"hidden": bool(getattr(row, "hidden", False)),
"is_mine": (current_user_id is None) or (row.user_id == current_user_id),
# 配置者(owner)的 user_id;路由层据此解析成可读用户名(owner_name)。
"owner_id": row.user_id,
@@ -74,7 +76,14 @@ class RoundtableChainRepository:
}
async def list_chains(
self, user_id: str, *, scope: str = "mine", limit: int = 200, is_admin: bool = False
self,
user_id: str,
*,
scope: str = "mine",
limit: int = 200,
is_admin: bool = False,
include_hidden: bool = False,
hidden: bool | None = None,
) -> list[dict[str, Any]]:
"""列出链条。
@@ -86,6 +95,10 @@ class RoundtableChainRepository:
- ``"all"``:所有账号的全部链条(**仅管理员**,由路由层校验后传 ``is_admin=True``;
非管理员误传则按 ``"mine"`` 退化,绝不越权)。
其余值按 ``"mine"`` 处理。``is_mine`` 标记每条是否本人所有,供前端判断可否编辑。
隐藏开关(``hidden=True`` 的行):默认从**所有**列表排除(含 admin 的普通视图,如
选链弹窗);``include_hidden=True``(管理员管理视图)时不排除,并可再用 ``hidden``
参数筛选「只看隐藏 / 只看显示中」。非管理员的 ``include_hidden`` 一律忽略。
"""
if scope == "public":
cond = RoundtableChainRow.is_public.is_(True)
@@ -98,6 +111,11 @@ class RoundtableChainRepository:
stmt = select(RoundtableChainRow)
if cond is not None:
stmt = stmt.where(cond)
if include_hidden and is_admin:
if hidden is not None:
stmt = stmt.where(RoundtableChainRow.hidden.is_(hidden))
else:
stmt = stmt.where(RoundtableChainRow.hidden.is_(False))
stmt = stmt.order_by(RoundtableChainRow.updated_at.desc()).limit(limit)
async with self._sf() as session:
result = await session.execute(stmt)
@@ -157,6 +175,7 @@ class RoundtableChainRepository:
is_public=_UNSET,
enabled=_UNSET,
pending_review=_UNSET,
hidden=_UNSET,
is_admin: bool = False,
) -> dict[str, Any] | None:
async with self._sf() as session:
@@ -186,6 +205,8 @@ class RoundtableChainRepository:
row.enabled = bool(enabled)
if pending_review is not _UNSET and pending_review is not None:
row.pending_review = bool(pending_review)
if hidden is not _UNSET and hidden is not None:
row.hidden = bool(hidden)
row.updated_at = datetime.now(UTC)
await session.commit()
await session.refresh(row)