from fastapi import APIRouter, Depends, Request from sqlalchemy.ext.asyncio import AsyncSession from backend.api.deps import AuthUser, get_current_user from backend.db.session import get_session from backend.modules.auth.schemas import LoginRequest, TokenResponse from backend.modules.auth.service import authenticate_user, build_access_token, create_login_audit from backend.modules.users.schemas import UserOut router = APIRouter(prefix="/api/v1/auth", tags=["auth"]) @router.post("/login", response_model=TokenResponse) async def login(payload: LoginRequest, request: Request, session: AsyncSession = Depends(get_session)) -> TokenResponse: user = await authenticate_user(session, payload.username, payload.password) token = build_access_token(user) await create_login_audit(session, user, request) return TokenResponse(access_token=token, user=UserOut.model_validate(user)) @router.get("/me", response_model=UserOut) async def me(auth_user: AuthUser = Depends(get_current_user)) -> UserOut: return UserOut.model_validate(auth_user.user) @router.post("/refresh", response_model=TokenResponse) async def refresh(auth_user: AuthUser = Depends(get_current_user)) -> TokenResponse: token = build_access_token(auth_user.user) return TokenResponse(access_token=token, user=UserOut.model_validate(auth_user.user))