File size: 2,576 Bytes
478dec6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
from externals.databases.database import get_db
from fastapi import APIRouter, UploadFile, File, Depends, status, HTTPException
from interfaces.api.deps import get_current_user
from services.knowledge.knowledge_setup import KnowledgeService
from typing import List
from utils.logger import get_logger


logger = get_logger("File API")

router = APIRouter(
    prefix="/file",
    tags=["File"],
)


@router.post(
    "/upload",
    status_code=status.HTTP_201_CREATED,
    summary="Upload multiple PDF knowledge files",
)
async def upload_knowledge_many(
    files: List[UploadFile] = File(...),
    db=Depends(get_db),
    current_user=Depends(get_current_user),
):
    """
    Upload multiple PDF files to Azure Blob Storage and log metadata.
    """

    knowledge_service = KnowledgeService(
        db=db,
        user=current_user,
    )

    results = []
    for file in files:
        if file.content_type != "application/pdf":
            raise HTTPException(
                status_code=status.HTTP_400_BAD_REQUEST,
                detail=f"File '{file.filename}' is not a PDF",
            )
        else:
            result = await knowledge_service.file.upload(file)
            results.append(result)

    return {
        "message": "Upload completed",
        "uploaded_by": current_user.email,
        "files": results,
    }

@router.get(
    "/{user_id}",
    status_code=status.HTTP_200_OK,
    summary="Get file metadata by user ID",
)
async def get_file_metadata_by_user(
    user_id: str,
    db=Depends(get_db),
    current_user=Depends(get_current_user),
):
    """
    Retrieve all file metadata uploaded by a specific user.
    """

    knowledge_service = KnowledgeService(
        db=db,
        user=current_user,
    )

    files = await knowledge_service.file.get_files_by_user(user_id)

    return {
        "message": "File metadata retrieved successfully",
        "requested_by": current_user.email,
        "files": files,
    }


@router.delete(
    "/{filename}",
    status_code=status.HTTP_200_OK,
    summary="Delete knowledge file by filename",
)
async def delete_knowledge_file(
    filename: str,
    db=Depends(get_db),
    current_user=Depends(get_current_user),
):
    """
    Delete a PDF knowledge file from Azure Blob and database.
    """

    knowledge_service = KnowledgeService(
        db=db,
        user=current_user,
    )

    await knowledge_service.delete.delete(filename)

    return {
        "message": "File deleted successfully",
        "filename": filename,
        "deleted_by": current_user.email,
    }