Spaces:
Running
Running
File size: 3,532 Bytes
478dec6 028a629 478dec6 028a629 | 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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | 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/{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,
}
@router.get(
"/score_card",
status_code=status.HTTP_200_OK,
summary="Get score card data for dashboard summary",
)
async def get_score_card(
db=Depends(get_db),
current_user=Depends(get_current_user),
):
"""
Retrieve all file metadata uploaded by a specific user.
Return:
- total file
- total profile extracted
- percent profile extracted
"""
try:
knowledge_service = KnowledgeService(
db=db,
user=current_user,
)
data = await knowledge_service.score_card.get_score_card()
return {
"status": "success",
"message": "Score card retrieved successfully",
"data": data,
}
except Exception as E:
logger.error(f"get score card error: {E}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"get score card error: {E}"
) |