"""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 src.contract_check.api.deps import AsyncSessionDep, CurrentUserDep, PublisherDep, StorageDep from src.contract_check.api.schemas import DocumentUploadResponse from src.contract_check.api.services import upload_and_enqueue from src.contract_check.core.logging import get_logger 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)