fix: import workspace member

This commit is contained in:
tao.chen
2026-08-07 19:25:04 +08:00
parent 45808192e0
commit 7b4b752109
+24 -8
View File
@@ -854,18 +854,34 @@ async def add_member(
status.HTTP_422_UNPROCESSABLE_ENTITY,
"用户的平台角色行不存在或已被删除",
)
duplicate = await session.scalar(
select(WorkspaceMembers.user_id).where(
# ``WorkspaceMembers`` 的主键是 ``(workspace_id, user_id)`` 复合 PK,
# 而 ``remove_member`` / ``delete_platform_employee`` 都是软删除 (保留行,
# 仅置 ``is_deleted=1``). 因此这里必须按主键查整行,而不是只看活跃行:
# 否则软删行会被 active-duplicate 检查漏过,然后 INSERT 直接撞 PK.
existing = await session.scalar(
select(WorkspaceMembers).where(
WorkspaceMembers.workspace_id == workspace_id,
WorkspaceMembers.user_id == payload.user_id,
WorkspaceMembers.is_deleted == 0,
)
)
if duplicate is not None:
raise HTTPException(
status.HTTP_409_CONFLICT,
"用户已是该 workspace 成员;workspace 角色继承自平台角色,"
"要变更请 PATCH /api/v1/platform/employees/{user_id} 修改 role_code",
if existing is not None:
if existing.is_deleted == 0:
raise HTTPException(
status.HTTP_409_CONFLICT,
"用户已是该 workspace 成员;workspace 角色继承自平台角色,"
"要变更请 PATCH /api/v1/platform/employees/{user_id} 修改 role_code",
)
# 复活软删除行. 保留 ``joined_at`` 作为历史记录;``role_id`` 重新继承
# 当前用户的平台角色 (用户在中间可能改过 platform_role);清掉
# ``deleted_at`` 标记本轮已不在软删状态.
existing.is_deleted = 0
existing.deleted_at = None
existing.role_id = role.role_id
existing.member_status = "active"
await session.flush()
await session.refresh(existing)
return _envelope(
context.request_id, member_payload(user, role, existing),
)
membership = WorkspaceMembers(
workspace_id=workspace_id,