DealDocumentScreening/src/contract_check/api/routes/documents.py

27 lines
975 B
Python

"""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)