from typing import Annotated from fastapi import Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.security import decode_access_token from app.models import User oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/login") async def get_current_user( token: Annotated[str, Depends(oauth2_scheme)], db: Annotated[AsyncSession, Depends(get_db)], ) -> User: payload = decode_access_token(token) if not payload or not payload.get("sub"): raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token") result = await db.execute(select(User).where(User.id == payload["sub"], User.is_deleted == False)) user = result.scalar_one_or_none() if not user or user.status != "enabled": raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Inactive user") return user