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-document", summary="upload a document with a given associated_with id.", description="upload a document. If success, returning the document id", ) async def attach_document_for_request( 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"})