add upload document api

This commit is contained in:
Mike Liao 2024-10-22 17:20:44 -07:00
parent a604597209
commit 154c0a4d36
2 changed files with 53 additions and 10 deletions

View File

@ -5,36 +5,37 @@ from starlette.status import HTTP_401_UNAUTHORIZED
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from app.central_storage.backend.application.document_hub import DocumentHub
from pydantic import BaseModel
router = APIRouter()
token_manager = TokenManager()
class Item(BaseModel):
associated_with: str
name: str
blob: bytes
@router.post(
"/upload-document",
summary="upload a document with a given associated_with id.",
summary="upload a document with a given associated_with id, document name and document data.",
description="upload a document. If success, returning the document id",
)
async def attach_document_for_request(
associated_with: str = Form(...),
file: UploadFile = File(None)
async def upload_document(
item:Item
):
document_hub = DocumentHub()
# File processing
try:
file_data = await file.read() # You can use async chunking for larger files
document_id = await document_hub.upload_document(
associated_with, file.filename, file_data
item.associated_with, item.name, item.blob
)
if document_id:
result = {"document_id": str(document_id), "file_name": file.filename}
result = {"document_id": str(document_id)}
return JSONResponse(content=jsonable_encoder(result))
else:
return JSONResponse(
status_code=500, content={"error": "File upload failed"}
status_code=500, content={"error": "Document upload failed"}
)
except Exception as e:

View File

@ -0,0 +1,42 @@
from fastapi import APIRouter, UploadFile, File, Form, HTTPException
from fastapi import APIRouter, Depends
from infra.token.token_manager import TokenManager
from starlette.status import HTTP_401_UNAUTHORIZED
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from app.central_storage.backend.application.document_hub import DocumentHub
router = APIRouter()
token_manager = TokenManager()
@router.post(
"/upload-file",
summary="upload a document with a given associated_with id.",
description="upload a document. If success, returning the document id and file name",
)
async def upload_file(
associated_with: str = Form(...),
file: UploadFile = File(None)
):
document_hub = DocumentHub()
# File processing
try:
file_data = await file.read() # You can use async chunking for larger files
document_id = await document_hub.upload_document(
associated_with, file.filename, file_data
)
if document_id:
result = {"document_id": str(document_id), "file_name": file.filename}
return JSONResponse(content=jsonable_encoder(result))
else:
return JSONResponse(
status_code=500, content={"error": "File upload failed"}
)
except Exception as e:
print("this is exception", e)
return JSONResponse(status_code=500, content={"error": "Internal server error"})