40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
from fastapi import APIRouter, Depends, File, Form, HTTPException, UploadFile
|
|
from sqlalchemy.orm import Session
|
|
|
|
from ..database import get_db
|
|
from ..services.doc_parser import parse_document
|
|
from ..services.template_service import create_template_record, save_template_blocks, store_template_file
|
|
|
|
|
|
router = APIRouter(prefix="/api/templates", tags=["templates"])
|
|
|
|
|
|
@router.post("/upload")
|
|
def upload_template(
|
|
file: UploadFile = File(...),
|
|
name: str = Form(...),
|
|
type: str = Form("report"),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
"""上传 Word 模板并创建模板记录。"""
|
|
try:
|
|
stored_path, content = store_template_file(file)
|
|
blocks = parse_document(content)
|
|
template = create_template_record(db, name=name, file_path=stored_path, type=type)
|
|
save_template_blocks(db, template.id, blocks)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
except Exception as exc:
|
|
db.rollback()
|
|
raise HTTPException(status_code=500, detail="模板上传失败") from exc
|
|
|
|
return {
|
|
"data": {
|
|
"template_id": template.id,
|
|
"name": template.name,
|
|
"block_count": len(blocks),
|
|
"status": "uploaded",
|
|
},
|
|
"message": "ok",
|
|
}
|