import logging from fastapi import APIRouter, Response, UploadFile, Depends from fastapi.responses import FileResponse from schemas.document import Document from components.services.document import DocumentService import common.dependencies as DI router = APIRouter(prefix='/datasets/{dataset_id}/documents') logger = logging.getLogger(__name__) @router.get('/{document_id}') async def get_document(document_id: int, dataset_id: int | None = None, document_service: DocumentService = Depends(DI.get_document_service)) -> 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: DocumentService = Depends(DI.get_document_service)) -> 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: DocumentService = Depends(DI.get_document_service)) -> Document: return document_service.add_document(dataset_id, file)