export.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from fastapi import APIRouter
  2. from app.core.exceptions import DocumentNotFoundError, ExportError
  3. from app.schemas.export import ExportDocRequest, ExportDocResponse
  4. from app.services.export_service import export_doc
  5. router = APIRouter(tags=["Export"])
  6. def _ok(data: dict) -> dict:
  7. return {"code": 0, "message": "Success", "data": data}
  8. # ------------------------------------------------------------------ #
  9. # POST /export/doc — 导出 .doc,写入记录,返回永久下载链接
  10. # ------------------------------------------------------------------ #
  11. @router.post("/export/doc", summary="导出 .doc 文件")
  12. async def export_document(body: ExportDocRequest) -> dict:
  13. # 若传入 documentId,可选同步更新草稿(失败不阻塞导出)
  14. if body.document_id:
  15. try:
  16. from app.core.database import AsyncSessionLocal
  17. from app.schemas.document import UpdateDocumentRequest
  18. from app.services.document_service import DocumentService
  19. async with AsyncSessionLocal() as db:
  20. svc = DocumentService(db)
  21. await svc.update_document(
  22. body.document_id,
  23. UpdateDocumentRequest(content=body.content),
  24. )
  25. except DocumentNotFoundError:
  26. pass
  27. except Exception:
  28. pass
  29. result = await export_doc(
  30. user_id=body.user_id,
  31. file_name=body.file_name,
  32. content=body.content,
  33. style_id=body.style_id,
  34. document_id=body.document_id,
  35. )
  36. resp = ExportDocResponse(
  37. record_id=result["record_id"],
  38. download_url=result["download_url"],
  39. file_name=result["file_name"],
  40. style_id=result["style_id"],
  41. warning=result["warning"],
  42. )
  43. return _ok(resp.model_dump(by_alias=True))