# -*- 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