89 lines
2.5 KiB
Python
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
|
|
}
|
|
}
|