63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
# 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_models import (LoginResponse, UserLogin, UserRegister,
|
|
UserResponse)
|
|
from models.database_models 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)
|