58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
||
from sqlalchemy.orm import Session
|
||
|
||
from app.database import get_db
|
||
from app.models.user_settings import UserSettings
|
||
from app.schemas.user_settings import UserSettingsUpdate, UserSettingsResponse
|
||
from app.utils.datetime import utcnow
|
||
from app.utils.logger import logger
|
||
|
||
router = APIRouter(prefix="/api/user-settings", tags=["用户设置"])
|
||
|
||
|
||
@router.get("", response_model=UserSettingsResponse)
|
||
def get_user_settings(db: Session = Depends(get_db)):
|
||
"""获取用户设置(单例模式)"""
|
||
try:
|
||
settings = db.query(UserSettings).filter(UserSettings.id == 1).first()
|
||
if not settings:
|
||
# 首次访问时自动创建默认设置
|
||
settings = UserSettings(id=1)
|
||
db.add(settings)
|
||
db.commit()
|
||
db.refresh(settings)
|
||
logger.info("自动创建默认用户设置")
|
||
return settings
|
||
except Exception as e:
|
||
logger.error(f"获取用户设置失败: {str(e)}")
|
||
raise HTTPException(status_code=500, detail="获取用户设置失败")
|
||
|
||
|
||
@router.put("", response_model=UserSettingsResponse)
|
||
def update_user_settings(
|
||
data: UserSettingsUpdate,
|
||
db: Session = Depends(get_db)
|
||
):
|
||
"""更新用户设置(upsert 单条记录)"""
|
||
try:
|
||
settings = db.query(UserSettings).filter(UserSettings.id == 1).first()
|
||
if not settings:
|
||
settings = UserSettings(id=1)
|
||
db.add(settings)
|
||
|
||
update_data = data.model_dump(exclude_unset=True)
|
||
for field, value in update_data.items():
|
||
setattr(settings, field, value)
|
||
|
||
settings.updated_at = utcnow()
|
||
db.commit()
|
||
db.refresh(settings)
|
||
|
||
logger.info("更新用户设置成功")
|
||
return settings
|
||
|
||
except Exception as e:
|
||
db.rollback()
|
||
logger.error(f"更新用户设置失败: {str(e)}")
|
||
raise HTTPException(status_code=500, detail="更新用户设置失败")
|