| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- from __future__ import annotations
- from pathlib import Path
- from fastapi import FastAPI
- from fastapi.middleware.cors import CORSMiddleware
- from .schemas import (
- TemplateCreate,
- TemplatePreviewRequest,
- TemplateRenderRequest,
- TemplateRenderResponse,
- TemplateUpdate,
- )
- from .services.renderer import renderer
- from .services.template_store import TemplateStore, load_store
- def create_app() -> FastAPI:
- base_dir = Path(__file__).resolve().parents[1]
- store: TemplateStore = load_store(base_dir)
- app = FastAPI(title="洗衣机语音播报模板运营系统", version="1.0.0")
- app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_methods=["*"],
- allow_headers=["*"],
- )
- @app.get("/api/health")
- async def health():
- return {"status": "ok"}
- @app.get("/api/templates")
- async def list_templates():
- return store.list_templates()
- @app.get("/api/templates/categories")
- async def list_categories():
- return {"categories": store.list_categories()}
- @app.get("/api/templates/{template_id}")
- async def get_template(template_id: str):
- return store.get_template(template_id)
- @app.post("/api/templates", status_code=201)
- async def create_template(payload: TemplateCreate):
- return store.create_template(payload)
- @app.put("/api/templates/{template_id}")
- async def update_template(template_id: str, payload: TemplateUpdate):
- return store.update_template(template_id, payload)
- @app.delete("/api/templates/{template_id}", status_code=204)
- async def delete_template(template_id: str):
- store.delete_template(template_id)
- return {"status": "deleted"}
- @app.post("/api/templates/render", response_model=TemplateRenderResponse)
- async def render_template(payload: TemplateRenderRequest):
- record = store.get_template(payload.template_id)
- rendered = renderer.render_from_record(record, payload.parameters)
- return {"rendered_text": rendered}
- @app.post("/api/templates/preview", response_model=TemplateRenderResponse)
- async def preview_template(payload: TemplatePreviewRequest):
- rendered = renderer.preview(payload)
- return {"rendered_text": rendered}
- return app
- app = create_app()
|