from __future__ import annotations from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from app.api.deps import get_session from app.core.dependencies import get_current_user_id from app.schemas.auth import ( LoginRequest, RefreshTokenRequest, RegisterRequest, TokenResponse, ) from app.services.auth_service import AuthService router = APIRouter(prefix="/auth", tags=["auth"]) @router.post("/register", response_model=TokenResponse, status_code=201) async def register( body: RegisterRequest, session: AsyncSession = Depends(get_session), ) -> TokenResponse: service = AuthService(session) user = await service.register(body.email, body.password, body.full_name) return await service._create_tokens(user) @router.post("/login", response_model=TokenResponse) async def login( body: LoginRequest, session: AsyncSession = Depends(get_session), ) -> TokenResponse: service = AuthService(session) return await service.login(body.email, body.password) @router.post("/refresh", response_model=TokenResponse) async def refresh_token( body: RefreshTokenRequest, session: AsyncSession = Depends(get_session), ) -> TokenResponse: service = AuthService(session) return await service.refresh(body.refresh_token) @router.post("/logout", status_code=204) async def logout( user_id: int = Depends(get_current_user_id), session: AsyncSession = Depends(get_session), ) -> None: service = AuthService(session) await service.logout(user_id)