File size: 1,733 Bytes
57cf043
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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)