| 269 | description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add") |
| 270 | @require_permissions(permission=SqlbotPermission(role=['admin'])) |
| 271 | async def add_model_ws_mapping_by_id( |
| 272 | session: SessionDep, |
| 273 | id: int = Path(description="ID"), |
| 274 | ws_ids: List[str] = Body(description="workspace id list"), |
| 275 | ): |
| 276 | if ws_ids is None: |
| 277 | ws_ids = [] |
| 278 | ws_ids = list({int(ws_id) for ws_id in ws_ids}) |
| 279 | |
| 280 | db_model = session.get(AiModelDetail, id) |
| 281 | if not db_model: |
| 282 | raise ValueError(f"AiModelDetail with id {id} not found") |
| 283 | |
| 284 | # 查询已存在的映射,过滤掉重复的 |
| 285 | existing_stmt = ( |
| 286 | select(AiModelWorkspaceMapping.workspace_id) |
| 287 | .where( |
| 288 | AiModelWorkspaceMapping.ai_model_id == id, |
| 289 | AiModelWorkspaceMapping.workspace_id.in_(ws_ids), |
| 290 | ) |
| 291 | ) |
| 292 | existing_ws_ids = set(session.exec(existing_stmt).all()) |
| 293 | |
| 294 | # 只插入不存在的映射 |
| 295 | new_ws_ids = [ws_id for ws_id in ws_ids if ws_id not in existing_ws_ids] |
| 296 | for ws_id in new_ws_ids: |
| 297 | session.add( |
| 298 | AiModelWorkspaceMapping(ai_model_id=id, workspace_id=ws_id) |
| 299 | ) |
| 300 | |
| 301 | session.commit() |
| 302 | |
| 303 | # 返回完整的映射列表 |
| 304 | all_stmt = ( |
| 305 | select(AiModelWorkspaceMapping.workspace_id) |
| 306 | .where(AiModelWorkspaceMapping.ai_model_id == id) |
| 307 | .distinct() |
| 308 | ) |
| 309 | all_ws_ids: List[int] = session.exec(all_stmt).all() |
| 310 | |
| 311 | return [str(ws_id) for ws_id in all_ws_ids] |
| 312 | |
| 313 | |
| 314 | # 删除指定映射 |