from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from app.api.deps import get_current_user from app.database import get_db from app.models.user import User from app.schemas.auth import TokenResponse, UserLogin, UserRegister, UserResponse from app.services.auth import authenticate_user, create_access_token, register_user router = APIRouter() @router.post("/register", response_model=UserResponse, status_code=status.HTTP_201_CREATED) async def register(user_data: UserRegister, db: AsyncSession = Depends(get_db)): try: user = await register_user(db, user_data) except ValueError as e: raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e) if str(e) else "邮箱已被注册") return user @router.post("/login", response_model=TokenResponse) async def login(user_data: UserLogin, db: AsyncSession = Depends(get_db)): user = await authenticate_user(db, user_data.email, user_data.password) if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="邮箱或密码错误", headers={"WWW-Authenticate": "Bearer"}, ) access_token = create_access_token(data={"sub": str(user.id)}) return { "access_token": access_token, "token_type": "bearer", "user": user, } @router.get("/me", response_model=UserResponse) async def read_current_user(current_user: User = Depends(get_current_user)): return current_user