Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions backend/apps/swagger/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@
"custom_model": "Custom Model",
"system_model_ws_mapping": "Query Model-Workspace Authorization Relationships",
"system_model_ws_mapping_update": "Update Model-Workspace Authorization Relationships",
"system_model_ws_mapping_add": "Add Model-Workspace Authorization Relationships",
"system_model_ws_mapping_delete": "Delete Model-Workspace Authorization Relationships",
"system_model_list_by_ws": "Get Model List by Workspace",
"model_name": "Name",
"model_type": "Type",
Expand Down
2 changes: 2 additions & 0 deletions backend/apps/swagger/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@
"custom_model": "自定义模型",
"system_model_ws_mapping": "查询模型授权工作空间的关联关系",
"system_model_ws_mapping_update": "更新模型授权工作空间的关联关系",
"system_model_ws_mapping_add": "新增模型授权工作空间的关联关系",
"system_model_ws_mapping_delete": "删除模型授权工作空间的关联关系",
"system_model_list_by_ws": "根据工作空间获取模型列表",
"model_name": "名称",
"model_type": "类型",
Expand Down
88 changes: 88 additions & 0 deletions backend/apps/system/api/aimodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,94 @@ async def update_model_ws_mapping_by_id(
return [str(ws_id) for ws_id in ws_ids]


# 新增映射(在已有基础上追加)
@router.post("/{id}/ws_mapping", response_model=List[str], summary=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add",
description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add")
@require_permissions(permission=SqlbotPermission(role=['admin']))
async def add_model_ws_mapping_by_id(
session: SessionDep,
id: int = Path(description="ID"),
ws_ids: List[str] = Body(description="workspace id list"),
):
if ws_ids is None:
ws_ids = []
ws_ids = list({int(ws_id) for ws_id in ws_ids})

db_model = session.get(AiModelDetail, id)
if not db_model:
raise ValueError(f"AiModelDetail with id {id} not found")

# 查询已存在的映射,过滤掉重复的
existing_stmt = (
select(AiModelWorkspaceMapping.workspace_id)
.where(
AiModelWorkspaceMapping.ai_model_id == id,
AiModelWorkspaceMapping.workspace_id.in_(ws_ids),
)
)
existing_ws_ids = set(session.exec(existing_stmt).all())

# 只插入不存在的映射
new_ws_ids = [ws_id for ws_id in ws_ids if ws_id not in existing_ws_ids]
for ws_id in new_ws_ids:
session.add(
AiModelWorkspaceMapping(ai_model_id=id, workspace_id=ws_id)
)

session.commit()

# 返回完整的映射列表
all_stmt = (
select(AiModelWorkspaceMapping.workspace_id)
.where(AiModelWorkspaceMapping.ai_model_id == id)
.distinct()
)
all_ws_ids: List[int] = session.exec(all_stmt).all()

return [str(ws_id) for ws_id in all_ws_ids]


# 删除指定映射
@router.delete("/{id}/ws_mapping", response_model=List[str],
summary=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_delete",
description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_delete")
@require_permissions(permission=SqlbotPermission(role=['admin']))
async def delete_model_ws_mapping_by_id(
session: SessionDep,
id: int = Path(description="ID"),
ws_ids: List[str] = Body(description="workspace id list"),
):
if ws_ids is None:
ws_ids = []
ws_ids = list({int(ws_id) for ws_id in ws_ids})

db_model = session.get(AiModelDetail, id)
if not db_model:
raise ValueError(f"AiModelDetail with id {id} not found")

# 只删除指定的映射
if ws_ids:
session.execute(
delete(AiModelWorkspaceMapping)
.where(
AiModelWorkspaceMapping.ai_model_id == id,
AiModelWorkspaceMapping.workspace_id.in_(ws_ids),
)
)

session.commit()

# 返回剩余的映射列表
stmt = (
select(AiModelWorkspaceMapping.workspace_id)
.where(AiModelWorkspaceMapping.ai_model_id == id)
.distinct()
)
remaining_ws_ids: List[int] = session.exec(stmt).all()

return [str(ws_id) for ws_id in remaining_ws_ids]


@router.get("/list/by_ws", response_model=List[AiModelBrief], summary=f"{PLACEHOLDER_PREFIX}system_model_list_by_ws",
description=f"{PLACEHOLDER_PREFIX}system_model_list_by_ws")
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))
Expand Down
Loading