from fastapi import Depends, HTTPException, status from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from sqlalchemy.ext.asyncio import AsyncSession from backend.app.core.config import settings from backend.app.core.database import get_session from backend.app.core.security import decode_access_token from backend.app.models.rider import Rider bearer_scheme = HTTPBearer() async def get_current_rider( credentials: HTTPAuthorizationCredentials = Depends(bearer_scheme), session: AsyncSession = Depends(get_session), ) -> Rider: try: payload = decode_access_token( credentials.credentials, settings.JWT_SECRET_KEY, settings.JWT_ALGORITHM, ) except Exception: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid or expired token", ) rider = await session.get(Rider, payload["sub"]) if not rider: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Rider not found", ) return rider