from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from app.dependencies import get_current_user, get_db from app.models.user import User from app.schemas.auth import LoginRequest, SignupRequest, TokenResponse from app.schemas.user import UserRead from app.services.auth_service import ( authenticate_user, build_token_response, create_user, ) router = APIRouter(prefix="/auth", tags=["auth"]) @router.post("/signup", response_model=TokenResponse, status_code=status.HTTP_201_CREATED) def signup(payload: SignupRequest, db: Session = Depends(get_db)) -> TokenResponse: try: user = create_user(db, payload) except ValueError as exc: raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc return build_token_response(user) @router.post("/login", response_model=TokenResponse) def login(payload: LoginRequest, db: Session = Depends(get_db)) -> TokenResponse: try: user = authenticate_user(db, payload) except ValueError as exc: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=str(exc)) from exc return build_token_response(user) @router.get("/me", response_model=UserRead) def read_me(current_user: User = Depends(get_current_user)) -> User: return current_user