| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- from fastapi import APIRouter, HTTPException, status, Depends
- from pydantic import BaseModel
- from typing import Optional, Annotated
- from datetime import datetime
- from ..db.ai_config import (
- get_config_by_app_name,
- create_config,
- update_config,
- delete_config,
- get_all_configs
- )
- from ..dependencies.auth import resolve_user_id
- router = APIRouter()
- class AIConfigCreate(BaseModel):
- appName: str
- knowledgeId: str
- apiKey: str
- baseUrl: str
- class AIConfigUpdate(BaseModel):
- knowledgeId: Optional[str] = None
- apiKey: Optional[str] = None
- baseUrl: Optional[str] = None
- status: Optional[int] = None
- class AIConfigResponse(BaseModel):
- id: str
- appName: str
- knowledgeId: str
- apiKey: str
- baseUrl: str
- status: int
- deleted: int
- createdAt: datetime
- updatedAt: datetime
- @router.post("/", response_model=dict, summary="创建AI配置", description="创建新的AI应用配置映射")
- async def create_ai_config(
- config: AIConfigCreate
- ) -> dict:
- """创建新的AI配置"""
- existing = get_config_by_app_name(config.appName)
- if existing:
- raise HTTPException(
- status_code=status.HTTP_400_BAD_REQUEST,
- detail=f"appName '{config.appName}' 已存在"
- )
- config_id = create_config(config.model_dump())
- if not config_id:
- raise HTTPException(
- status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
- detail="创建配置失败"
- )
- return {
- "message": "配置创建成功",
- "id": config_id,
- "appName": config.appName
- }
- @router.get("/{app_name}", response_model=dict, summary="获取AI配置", description="根据appName获取AI配置")
- async def get_ai_config(
- app_name: str
- ) -> dict:
- """获取指定appName的配置"""
- config = get_config_by_app_name(app_name)
- if not config:
- raise HTTPException(
- status_code=status.HTTP_404_NOT_FOUND,
- detail=f"appName '{app_name}' 的配置不存在"
- )
- return config
- @router.put("/{app_name}", response_model=dict, summary="更新AI配置", description="更新指定appName的AI配置")
- async def update_ai_config(
- app_name: str,
- config_update: AIConfigUpdate
- ) -> dict:
- """更新指定appName的配置"""
- existing = get_config_by_app_name(app_name)
- if not existing:
- raise HTTPException(
- status_code=status.HTTP_404_NOT_FOUND,
- detail=f"appName '{app_name}' 的配置不存在"
- )
- update_data = {k: v for k, v in config_update.model_dump().items() if v is not None}
- if not update_data:
- raise HTTPException(
- status_code=status.HTTP_400_BAD_REQUEST,
- detail="没有要更新的字段"
- )
- matched = update_config(app_name, update_data)
- if matched == 0:
- raise HTTPException(
- status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
- detail="更新配置失败"
- )
- return {
- "message": "配置更新成功",
- "appName": app_name
- }
- @router.delete("/{app_name}", response_model=dict, summary="删除AI配置", description="删除指定appName的AI配置")
- async def delete_ai_config(
- app_name: str
- ) -> dict:
- """删除指定appName的配置"""
- existing = get_config_by_app_name(app_name)
- if not existing:
- raise HTTPException(
- status_code=status.HTTP_404_NOT_FOUND,
- detail=f"appName '{app_name}' 的配置不存在"
- )
- matched = delete_config(app_name)
- if matched == 0:
- raise HTTPException(
- status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
- detail="删除配置失败"
- )
- return {
- "message": "配置删除成功",
- "appName": app_name
- }
- @router.get("/", response_model=dict, summary="获取所有AI配置", description="获取所有启用的AI配置")
- async def list_ai_configs(
- ) -> dict:
- """获取所有启用的配置"""
- configs = get_all_configs()
- return {
- "total": len(configs),
- "configs": configs
- }
|