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