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()