Files
ToDoList/api/app/routers/user_settings.py
祀梦 2979197b1c release: Elysia ToDo v1.0.0
鍏ㄦ爤涓汉淇℃伅绠$悊搴旂敤锛岄泦鎴愬緟鍔炰换鍔°€佷範鎯墦鍗°€佺邯蹇垫棩鎻愰啋銆佽祫浜ф€昏鍔熻兘銆

Made-with: Cursor
2026-03-14 22:21:26 +08:00

58 lines
1.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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="更新用户设置失败")