release: Elysia ToDo v1.0.0
鍏ㄦ爤涓汉淇℃伅绠$悊搴旂敤锛岄泦鎴愬緟鍔炰换鍔°€佷範鎯墦鍗°€佺邯蹇垫棩鎻愰啋銆佽祫浜ф€昏鍔熻兘銆 Made-with: Cursor
This commit is contained in:
57
api/app/routers/user_settings.py
Normal file
57
api/app/routers/user_settings.py
Normal file
@@ -0,0 +1,57 @@
|
||||
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="更新用户设置失败")
|
||||
Reference in New Issue
Block a user