Spaces:
Running
Running
| """Authentication API routes.""" | |
| from fastapi import APIRouter, Depends, HTTPException, status | |
| from sqlmodel import Session, select | |
| from src.api.deps import get_db, get_current_user | |
| from src.schemas.auth import SignupRequest, SigninRequest, SignupResponse, TokenResponse, UserProfile | |
| from src.services.auth_service import AuthService | |
| from src.models.user import User | |
| router = APIRouter(prefix="/api/auth", tags=["authentication"]) | |
| def signup( | |
| signup_data: SignupRequest, | |
| db: Session = Depends(get_db) | |
| ): | |
| """ | |
| Register a new user account. | |
| Args: | |
| signup_data: User signup information (email, password, name) | |
| db: Database session | |
| Returns: | |
| SignupResponse: Created user details | |
| Raises: | |
| HTTPException: 400 if validation fails | |
| HTTPException: 409 if email already exists | |
| """ | |
| service = AuthService(db) | |
| return service.signup(signup_data) | |
| def signin( | |
| signin_data: SigninRequest, | |
| db: Session = Depends(get_db) | |
| ): | |
| """ | |
| Authenticate user and issue JWT token. | |
| Args: | |
| signin_data: User signin credentials (email, password) | |
| db: Database session | |
| Returns: | |
| TokenResponse: JWT token and user profile | |
| Raises: | |
| HTTPException: 401 if credentials are invalid | |
| """ | |
| service = AuthService(db) | |
| return service.signin(signin_data) | |
| def get_current_user_profile( | |
| current_user_id: int = Depends(get_current_user), | |
| db: Session = Depends(get_db) | |
| ): | |
| """ | |
| Get current authenticated user's profile. | |
| Args: | |
| current_user_id: ID of authenticated user from JWT token | |
| db: Database session | |
| Returns: | |
| UserProfile: Current user's profile information | |
| Raises: | |
| HTTPException: 404 if user not found | |
| """ | |
| user = db.exec(select(User).where(User.id == current_user_id)).first() | |
| if not user: | |
| raise HTTPException( | |
| status_code=status.HTTP_404_NOT_FOUND, | |
| detail="User not found" | |
| ) | |
| return UserProfile( | |
| id=user.id, | |
| email=user.email, | |
| name=user.name, | |
| created_at=user.created_at | |
| ) | |