| 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 |
|
|