Spaces:
Sleeping
Sleeping
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,
}
|