124 lines
4.1 KiB
Python
124 lines
4.1 KiB
Python
"""
|
|
配置相关API路由
|
|
"""
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
import logging
|
|
|
|
from ..core.dependencies import get_database_session
|
|
from ..schemas.config import ConfigResponse, ConfigUpdateRequest, ConfigTestRequest, ConfigTestResponse
|
|
from ..services.config_manager import ConfigManager
|
|
from ..core.exceptions import ConfigurationError, DatabaseError
|
|
|
|
logger = logging.getLogger(__name__)
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/", response_model=ConfigResponse)
|
|
async def get_config(
|
|
db: AsyncSession = Depends(get_database_session)
|
|
):
|
|
"""获取系统配置"""
|
|
|
|
try:
|
|
config_manager = ConfigManager(db)
|
|
config = await config_manager.get_config()
|
|
logger.info("获取系统配置成功")
|
|
return config
|
|
|
|
except DatabaseError as e:
|
|
logger.error(f"获取配置时数据库错误: {str(e)}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"数据库错误: {str(e)}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"获取配置失败: {str(e)}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"获取配置失败: {str(e)}"
|
|
)
|
|
|
|
|
|
@router.put("/", response_model=ConfigResponse)
|
|
async def update_config(
|
|
config_update: ConfigUpdateRequest,
|
|
db: AsyncSession = Depends(get_database_session)
|
|
):
|
|
"""更新系统配置"""
|
|
|
|
try:
|
|
# 验证至少有一个配置项需要更新
|
|
if not any([config_update.database, config_update.gemini_api, config_update.data_sources]):
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail="至少需要提供一个配置项进行更新"
|
|
)
|
|
|
|
config_manager = ConfigManager(db)
|
|
updated_config = await config_manager.update_config(config_update)
|
|
logger.info("更新系统配置成功")
|
|
return updated_config
|
|
|
|
except HTTPException:
|
|
raise
|
|
except ConfigurationError as e:
|
|
logger.error(f"配置错误: {str(e)}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=f"配置错误: {str(e)}"
|
|
)
|
|
except DatabaseError as e:
|
|
logger.error(f"更新配置时数据库错误: {str(e)}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"数据库错误: {str(e)}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"更新配置失败: {str(e)}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"更新配置失败: {str(e)}"
|
|
)
|
|
|
|
|
|
@router.post("/test", response_model=ConfigTestResponse)
|
|
async def test_config(
|
|
test_request: ConfigTestRequest,
|
|
db: AsyncSession = Depends(get_database_session)
|
|
):
|
|
"""测试配置连接"""
|
|
|
|
try:
|
|
# 验证配置类型
|
|
valid_types = ["database", "gemini", "data_source"]
|
|
if test_request.config_type not in valid_types:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=f"不支持的配置类型: {test_request.config_type},支持的类型: {valid_types}"
|
|
)
|
|
|
|
config_manager = ConfigManager(db)
|
|
test_result = await config_manager.test_config(
|
|
test_request.config_type,
|
|
test_request.config_data
|
|
)
|
|
|
|
logger.info(f"配置测试完成: {test_request.config_type}, 结果: {test_result.success}")
|
|
return test_result
|
|
|
|
except HTTPException:
|
|
raise
|
|
except ConfigurationError as e:
|
|
logger.error(f"配置测试错误: {str(e)}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=f"配置测试错误: {str(e)}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"配置测试失败: {str(e)}")
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"配置测试失败: {str(e)}"
|
|
) |