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", }