user_router.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # -*- coding: utf-8 -*-
  2. """用户个人信息管理:查询与更新当前登录用户的基础资料"""
  3. from datetime import datetime
  4. from typing import Optional
  5. from fastapi import APIRouter, Depends, HTTPException
  6. from pydantic import BaseModel
  7. from sqlalchemy.orm import Session
  8. from backend.database import get_db
  9. from backend.models import User
  10. from backend.services.auth import get_current_user_id
  11. router = APIRouter(prefix="/users", tags=["用户"])
  12. class UserProfileResponse(BaseModel):
  13. id: int
  14. username: str
  15. role: str
  16. full_name: Optional[str] = None
  17. student_id: Optional[str] = None
  18. class_name: Optional[str] = None
  19. grade: Optional[str] = None
  20. email: Optional[str] = None
  21. phone: Optional[str] = None
  22. created_at: datetime
  23. class Config:
  24. orm_mode = True
  25. class UserProfileUpdateRequest(BaseModel):
  26. full_name: Optional[str] = None
  27. student_id: Optional[str] = None
  28. class_name: Optional[str] = None
  29. grade: Optional[str] = None
  30. email: Optional[str] = None
  31. phone: Optional[str] = None
  32. @router.get("/me", response_model=UserProfileResponse)
  33. def get_my_profile(
  34. user_id: int = Depends(get_current_user_id),
  35. db: Session = Depends(get_db),
  36. ):
  37. user = db.query(User).filter(User.id == user_id).first()
  38. if not user:
  39. raise HTTPException(status_code=404, detail="用户不存在")
  40. return user
  41. @router.put("/me", response_model=UserProfileResponse)
  42. def update_my_profile(
  43. payload: UserProfileUpdateRequest,
  44. user_id: int = Depends(get_current_user_id),
  45. db: Session = Depends(get_db),
  46. ):
  47. user = db.query(User).filter(User.id == user_id).first()
  48. if not user:
  49. raise HTTPException(status_code=404, detail="用户不存在")
  50. for field, value in payload.dict(exclude_unset=True).items():
  51. setattr(user, field, value)
  52. db.add(user)
  53. db.commit()
  54. db.refresh(user)
  55. return user