from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.models.config import ConfigDB, ConfigInfo, ConfigUpdate from app.models.user import UserDB from app.models.database import get_db from app.api.deps import get_admin_user from app.core.response import success_response, error_response, ResponseModel router = APIRouter() @router.get("", response_model=ResponseModel) async def get_configs( db: Session = Depends(get_db) ): """获取所有配置""" configs = db.query(ConfigDB).all() # 转换为数组格式 config_list = [ ConfigInfo.model_validate(config) for config in configs ] return success_response(data=config_list) @router.delete("/{key}", response_model=ResponseModel) async def delete_config( key: str, db: Session = Depends(get_db), admin: UserDB = Depends(get_admin_user) ): """删除配置""" config = db.query(ConfigDB).filter(ConfigDB.key == key).first() if not config: return error_response(code=400, message=f"配置项 {key} 不存在") db.delete(config) db.commit() return success_response(message="配置删除成功") @router.put("/{key}", response_model=ResponseModel) async def update_config( key: str, config: ConfigUpdate, db: Session = Depends(get_db), admin: UserDB = Depends(get_admin_user) ): """更新配置""" db_config = db.query(ConfigDB).filter(ConfigDB.key == key).first() if not db_config: return error_response(code=400, message=f"配置项 {key} 不存在") db_config.value = config.value db_config.description = config.description db.commit() db.refresh(db_config) return success_response( message="配置更新成功", data=ConfigInfo.model_validate(db_config) ) @router.post("", response_model=ResponseModel) async def create_config( config: ConfigInfo, db: Session = Depends(get_db), admin: UserDB = Depends(get_admin_user) # 仅管理员可操作 ): """创建配置""" # 检查key是否已存在 exists = db.query(ConfigDB).filter(ConfigDB.key == config.key).first() if exists: return error_response(code=400, message=f"配置项 {config.key} 已存在") # 创建新配置 db_config = ConfigDB( key=config.key, value=config.value, description=config.description ) try: db.add(db_config) db.commit() db.refresh(db_config) return success_response( message="配置创建成功", data=ConfigInfo.model_validate(db_config) ) except Exception as e: db.rollback() return error_response(code=500, message=f"创建失败: {str(e)}")