"""Document upload endpoint: reserve credit, store in MinIO, enqueue to RabbitMQ.""" from __future__ import annotations from typing import Annotated from fastapi import APIRouter, File, UploadFile, status from ...core.logging import get_logger from ..deps import AsyncSessionDep, CurrentUserDep, PublisherDep, StorageDep from ..schemas import DocumentUploadResponse from ..services import upload_and_enqueue log = get_logger(__name__) router = APIRouter(prefix="/api/v1/documents", tags=["documents"]) @router.post("", response_model=DocumentUploadResponse, status_code=status.HTTP_202_ACCEPTED) async def upload_document( session: AsyncSessionDep, storage: StorageDep, publisher: PublisherDep, user: CurrentUserDep, file: Annotated[UploadFile, File()], ) -> DocumentUploadResponse: return await upload_and_enqueue(session, storage, publisher, user.user_id, file)