""" 用户相关 API 端点 """ from fastapi import APIRouter, Depends, HTTPException, status from sqlmodel import Session, select from typing import List from app.db.session import get_db from app.models.user import User from app.schemas.user import User as UserSchema from app.core.security import decode_access_token from fastapi.security import OAuth2PasswordBearer router = APIRouter() oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/v1/auth/login") async def get_current_user( token: str = Depends(oauth2_scheme), db: Session = Depends(get_db) ) -> User: """获取当前登录用户""" payload = decode_access_token(token) if payload is None: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="无效的认证凭据", headers={"WWW-Authenticate": "Bearer"}, ) username: str = payload.get("sub") if username is None: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="无效的认证凭据", headers={"WWW-Authenticate": "Bearer"}, ) statement = select(User).where(User.username == username) user = db.exec(statement).first() if user is None: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="用户不存在", headers={"WWW-Authenticate": "Bearer"}, ) return user @router.get("/me", response_model=UserSchema) async def read_users_me(current_user: User = Depends(get_current_user)): """获取当前用户信息""" return current_user @router.get("/", response_model=List[UserSchema]) def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): """获取用户列表(示例端点)""" statement = select(User).offset(skip).limit(limit) users = db.exec(statement).all() return users