""" ©AngelaMos | 2025 Authentication routes """ from fastapi import ( APIRouter, Depends, Request, status, ) from slowapi import Limiter from slowapi.util import get_remote_address from sqlalchemy.orm import Session from config import settings from core.database import get_db from schemas.user_schemas import ( TokenResponse, UserCreate, UserLogin, UserResponse, ) from services.auth_service import AuthService router = APIRouter(prefix="/auth", tags=["authentication"]) limiter = Limiter(key_func=get_remote_address) @router.post( "/register", response_model=UserResponse, status_code=status.HTTP_201_CREATED, ) @limiter.limit(settings.API_RATE_LIMIT_REGISTER) async def register( request: Request, user_data: UserCreate, db: Session = Depends(get_db), ) -> UserResponse: """ Register a new user account """ return AuthService.register_user(db, user_data) @router.post( "/login", response_model=TokenResponse, status_code=status.HTTP_200_OK, ) @limiter.limit(settings.API_RATE_LIMIT_LOGIN) async def login( request: Request, login_data: UserLogin, db: Session = Depends(get_db), ) -> TokenResponse: """ Authenticate user and receive JWT token """ return AuthService.login_user(db, login_data)