"""Authentication API routes.""" from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from ..database import get_db from ..schemas.user import UserLogin, Token, UserResponse from ..services.auth_service import AuthService from .deps import get_current_user from ..models.user import User router = APIRouter() @router.post("/login", response_model=Token) def login( credentials: UserLogin, db: Session = Depends(get_db) ): """Authenticate user and return JWT tokens.""" auth_service = AuthService(db) user = auth_service.authenticate_user(credentials.username, credentials.password) if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect username or password", headers={"WWW-Authenticate": "Bearer"} ) return auth_service.create_tokens(user) @router.post("/refresh", response_model=Token) def refresh_token( refresh_token: str, db: Session = Depends(get_db) ): """Refresh access token using refresh token.""" auth_service = AuthService(db) tokens = auth_service.refresh_tokens(refresh_token) if not tokens: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid refresh token", headers={"WWW-Authenticate": "Bearer"} ) return tokens @router.get("/me", response_model=UserResponse) def get_current_user_info( current_user: User = Depends(get_current_user) ): """Get current authenticated user information.""" return current_user