Team Ai
Apppublic

kernelmind/Resume-Screener-API

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
routes.py90 linesDownload Raw Back to auth
1"""2Authentication routes.3 4Endpoints for user registration, login, and profile.5"""6 7from fastapi import APIRouter, Depends, HTTPException, status8from sqlalchemy.orm import Session9 10from src.database import get_db11from src.auth.models import User12from src.auth.schemas import UserCreate, UserLogin, Token, UserResponse13from src.auth.jwt import create_access_token14from src.auth.dependencies import get_current_user15 16 17router = APIRouter(prefix="/api/v1/auth", tags=["Authentication"])18 19 20@router.post("/register", response_model=UserResponse, status_code=status.HTTP_201_CREATED)21async def register(user_data: UserCreate, db: Session = Depends(get_db)):22    """23    Register a new user.24    25    - **email**: Valid email address (must be unique)26    - **password**: Minimum 6 characters27    """28    try:29        # Check if email already exists30        existing_user = db.query(User).filter(User.email == user_data.email).first()31        if existing_user:32            raise HTTPException(33                status_code=status.HTTP_400_BAD_REQUEST,34                detail="Email already registered"35            )36        37        # Create new user38        hashed_password = User.hash_password(user_data.password)39        new_user = User(email=user_data.email, hashed_password=hashed_password)40        41        db.add(new_user)42        db.commit()43        db.refresh(new_user)44        45        return new_user46    except HTTPException:47        raise48    except Exception as e:49        import traceback50        print(f"Registration error: {e}")51        print(traceback.format_exc())52        raise HTTPException(53            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,54            detail=f"Registration failed: {str(e)}"55        )56 57 58@router.post("/login", response_model=Token)59async def login(user_data: UserLogin, db: Session = Depends(get_db)):60    """61    Login and get JWT token.62    63    Returns access token that must be included in Authorization header64    for protected endpoints.65    """66    # Find user67    user = db.query(User).filter(User.email == user_data.email).first()68    69    if not user or not user.verify_password(user_data.password):70        raise HTTPException(71            status_code=status.HTTP_401_UNAUTHORIZED,72            detail="Invalid email or password",73            headers={"WWW-Authenticate": "Bearer"},74        )75    76    # Create token77    access_token = create_access_token(data={"sub": user.email})78    79    return Token(access_token=access_token)80 81 82@router.get("/me", response_model=UserResponse)83async def get_me(current_user: User = Depends(get_current_user)):84    """85    Get current user info.86    87    Requires valid JWT token in Authorization header.88    """89    return current_user90