import uuid from app.database import async_session_factory from app.services.document_service import update_document_text from app.utils.text_extraction import extract_text async def process_document(doc_id: uuid.UUID, storage_path: str, mime_type: str) -> None: """Background task: extract text from uploaded document.""" async with async_session_factory() as db: try: # Update status to processing from sqlalchemy import select from app.models.document import Document result = await db.execute(select(Document).where(Document.id == doc_id)) doc = result.scalar_one_or_none() if not doc: return doc.processing_status = "processing" await db.commit() # Extract text text = extract_text(storage_path, mime_type) # Update with extracted text await update_document_text(db, doc_id, text, "completed" if text else "failed") await db.commit() except Exception: await update_document_text(db, doc_id, "", "failed") await db.commit()