初始化
This commit is contained in:
88
backend/app/routers/settings.py
Normal file
88
backend/app/routers/settings.py
Normal file
@@ -0,0 +1,88 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user