Files
2026-04-13 14:22:31 +08:00

89 lines
2.5 KiB
Python

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
}
}