from typing import List from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from pydantic import BaseModel from app.database import get_db from app.models import Setting from app.routers.auth import get_current_admin router = APIRouter(prefix="/settings", tags=["系统设置"]) # Pydantic模型 class SettingItem(BaseModel): key: str value: str class SettingsUpdate(BaseModel): settings: List[SettingItem] @router.get("", response_model=dict) def get_settings(db: Session = Depends(get_db), current_admin=Depends(get_current_admin)): """获取所有设置(按分组)""" settings = db.query(Setting).order_by(Setting.group_name, Setting.sort_order).all() # 按分组组织 result = {} for setting in settings: group = setting.group_name or "general" if group not in result: result[group] = {} result[group][setting.setting_key] = setting.setting_value return { "code": 200, "message": "success", "data": result } @router.put("", response_model=dict) def update_settings(data: SettingsUpdate, db: Session = Depends(get_db), current_admin=Depends(get_current_admin)): """批量更新设置""" updated_count = 0 for item in data.settings: setting = db.query(Setting).filter(Setting.setting_key == item.key).first() if setting: setting.setting_value = item.value updated_count += 1 else: # 如果不存在则创建 new_setting = Setting( setting_key=item.key, setting_value=item.value, description="", group_name="general" ) db.add(new_setting) updated_count += 1 db.commit() return { "code": 200, "message": f"成功更新 {updated_count} 项设置", "data": None } @router.get("/value/{key}", response_model=dict) def get_setting_value(key: str, db: Session = Depends(get_db), current_admin=Depends(get_current_admin)): """获取单个设置值""" setting = db.query(Setting).filter(Setting.setting_key == key).first() if not setting: raise HTTPException(status_code=404, detail="设置项不存在") return { "code": 200, "message": "success", "data": { "key": setting.setting_key, "value": setting.setting_value, "description": setting.description } }