27 lines
975 B
Python
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)
|