from __future__ import annotations from fastapi import APIRouter from fastapi import Depends from fastapi import Header from app.api.dependencies import get_auth_service from app.api.dependencies import require_current_user from app.models.entities import User from app.schemas.auth import AuthMeResponse from app.schemas.auth import LoginRequest from app.schemas.auth import LoginResponse from app.schemas.auth import LogoutResponse from app.schemas.auth import UserSummary from app.services.auth_service import AuthService router = APIRouter() @router.post("/login", response_model=LoginResponse) async def login( payload: LoginRequest, service: AuthService = Depends(get_auth_service), ) -> LoginResponse: result = await service.login(username=payload.username, password=payload.password) return LoginResponse( access_token=result.access_token, expires_at=result.expires_at, user=UserSummary.model_validate(result.user, from_attributes=True), ) @router.get("/me", response_model=AuthMeResponse) async def me( current_user: User = Depends(require_current_user), ) -> AuthMeResponse: return AuthMeResponse(user=UserSummary.model_validate(current_user, from_attributes=True)) @router.post("/logout", response_model=LogoutResponse) async def logout( authorization: str | None = Header(default=None, alias="Authorization"), service: AuthService = Depends(get_auth_service), ) -> LogoutResponse: await service.logout(authorization) return LogoutResponse()