import logging from typing import Annotated from fastapi import APIRouter, Response, UploadFile, Depends from fastapi.responses import FileResponse from common import auth from schemas.document import Document from components.services.document import DocumentService import common.dependencies as DI router = APIRouter(prefix='/datasets/{dataset_id}/documents', tags=['Documents']) logger = logging.getLogger(__name__) @router.get('/{document_id}') async def get_document(document_id: int, document_service: Annotated[DocumentService, Depends(DI.get_document_service)], current_user: Annotated[any, Depends(auth.get_current_user)], dataset_id: int | None = None ) -> FileResponse: logger.info(f"Handling GET request to /documents/{document_id}") try: result = document_service.get_document(document_id, dataset_id) logger.info(f"Successfully retrieved document info for ID {document_id}") return FileResponse( path=result.filepath, filename=result.filename, media_type="application/xml", headers={"Content-Type": "application/xml; charset=cp866"}, #TODO: charset=cp866 выглядит как дичь ) except Exception as e: logger.error(f"Error retrieving document {document_id}: {str(e)}") raise @router.delete('/{document_id}') async def delete_document(dataset_id: int, document_id: int, document_service: Annotated[DocumentService, Depends(DI.get_document_service)], current_user: Annotated[any, Depends(auth.get_current_user)] ) -> None: document_service.delete_document(dataset_id, document_id) return Response(status_code=200) @router.post('/') async def add_document(dataset_id: int, file: UploadFile, document_service: Annotated[DocumentService, Depends(DI.get_document_service)], current_user: Annotated[any, Depends(auth.get_current_user)] ) -> Document: return document_service.add_document(dataset_id, file)