| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- # -*- coding: utf-8 -*-
- """用户个人信息管理:查询与更新当前登录用户的基础资料"""
- from datetime import datetime
- from typing import Optional
- from fastapi import APIRouter, Depends, HTTPException
- from pydantic import BaseModel
- from sqlalchemy.orm import Session
- from backend.database import get_db
- from backend.models import User
- from backend.services.auth import get_current_user_id
- router = APIRouter(prefix="/users", tags=["用户"])
- class UserProfileResponse(BaseModel):
- id: int
- username: str
- role: str
- full_name: Optional[str] = None
- student_id: Optional[str] = None
- class_name: Optional[str] = None
- grade: Optional[str] = None
- email: Optional[str] = None
- phone: Optional[str] = None
- created_at: datetime
- class Config:
- orm_mode = True
- class UserProfileUpdateRequest(BaseModel):
- full_name: Optional[str] = None
- student_id: Optional[str] = None
- class_name: Optional[str] = None
- grade: Optional[str] = None
- email: Optional[str] = None
- phone: Optional[str] = None
- @router.get("/me", response_model=UserProfileResponse)
- def get_my_profile(
- user_id: int = Depends(get_current_user_id),
- db: Session = Depends(get_db),
- ):
- user = db.query(User).filter(User.id == user_id).first()
- if not user:
- raise HTTPException(status_code=404, detail="用户不存在")
- return user
- @router.put("/me", response_model=UserProfileResponse)
- def update_my_profile(
- payload: UserProfileUpdateRequest,
- user_id: int = Depends(get_current_user_id),
- db: Session = Depends(get_db),
- ):
- user = db.query(User).filter(User.id == user_id).first()
- if not user:
- raise HTTPException(status_code=404, detail="用户不存在")
- for field, value in payload.dict(exclude_unset=True).items():
- setattr(user, field, value)
- db.add(user)
- db.commit()
- db.refresh(user)
- return user
|