File size: 2,124 Bytes
57cf043
fd3c8b9
57cf043
 
 
 
fd3c8b9
57cf043
 
 
 
fd3c8b9
57cf043
 
 
 
fd3c8b9
 
 
 
 
57cf043
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fd3c8b9
 
 
 
57cf043
 
 
 
 
 
fd3c8b9
 
 
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
44
45
46
47
48
49
50
51
52
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)