from fastapi import APIRouter, UploadFile, File, Form, HTTPException from fastapi import APIRouter, Depends from starlette.status import HTTP_401_UNAUTHORIZED from fastapi.encoders import jsonable_encoder from fastapi.responses import JSONResponse from backend.application.document_hub import DocumentHub router = APIRouter() @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: return JSONResponse(status_code=500, content={"error": "Internal server error"})