# app/api/v1/auth.py """Summary description .... This module provides classes and functions for: - .... - .... - .... """ import logging from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.api.deps import get_current_user from app.core.database import get_db from app.services.auth_service import auth_service from models.api.auth import (LoginResponse, UserLogin, UserRegister, UserResponse) from models.database.user import User router = APIRouter() logger = logging.getLogger(__name__) # Authentication Routes @router.post("/auth/register", response_model=UserResponse) def register_user(user_data: UserRegister, db: Session = Depends(get_db)): """Register a new user.""" try: user = auth_service.register_user(db=db, user_data=user_data) return UserResponse.model_validate(user) except HTTPException: raise except Exception as e: logger.error(f"Error registering user: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error") @router.post("/auth/login", response_model=LoginResponse) def login_user(user_credentials: UserLogin, db: Session = Depends(get_db)): """Login user and return JWT token.""" try: login_result = auth_service.login_user(db=db, user_credentials=user_credentials) return LoginResponse( access_token=login_result["token_data"]["access_token"], token_type=login_result["token_data"]["token_type"], expires_in=login_result["token_data"]["expires_in"], user=UserResponse.model_validate(login_result["user"]), ) except HTTPException: raise except Exception as e: logger.error(f"Error logging in user: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error") @router.get("/auth/me", response_model=UserResponse) def get_current_user_info(current_user: User = Depends(get_current_user)): """Get current user information.""" return UserResponse.model_validate(current_user)