""" 配置相关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)}" )