main.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from __future__ import annotations
  2. from pathlib import Path
  3. from fastapi import FastAPI
  4. from fastapi.middleware.cors import CORSMiddleware
  5. from .schemas import (
  6. TemplateCreate,
  7. TemplatePreviewRequest,
  8. TemplateRenderRequest,
  9. TemplateRenderResponse,
  10. TemplateUpdate,
  11. )
  12. from .services.renderer import renderer
  13. from .services.template_store import TemplateStore, load_store
  14. def create_app() -> FastAPI:
  15. base_dir = Path(__file__).resolve().parents[1]
  16. store: TemplateStore = load_store(base_dir)
  17. app = FastAPI(title="洗衣机语音播报模板运营系统", version="1.0.0")
  18. app.add_middleware(
  19. CORSMiddleware,
  20. allow_origins=["*"],
  21. allow_methods=["*"],
  22. allow_headers=["*"],
  23. )
  24. @app.get("/api/health")
  25. async def health():
  26. return {"status": "ok"}
  27. @app.get("/api/templates")
  28. async def list_templates():
  29. return store.list_templates()
  30. @app.get("/api/templates/categories")
  31. async def list_categories():
  32. return {"categories": store.list_categories()}
  33. @app.get("/api/templates/{template_id}")
  34. async def get_template(template_id: str):
  35. return store.get_template(template_id)
  36. @app.post("/api/templates", status_code=201)
  37. async def create_template(payload: TemplateCreate):
  38. return store.create_template(payload)
  39. @app.put("/api/templates/{template_id}")
  40. async def update_template(template_id: str, payload: TemplateUpdate):
  41. return store.update_template(template_id, payload)
  42. @app.delete("/api/templates/{template_id}", status_code=204)
  43. async def delete_template(template_id: str):
  44. store.delete_template(template_id)
  45. return {"status": "deleted"}
  46. @app.post("/api/templates/render", response_model=TemplateRenderResponse)
  47. async def render_template(payload: TemplateRenderRequest):
  48. record = store.get_template(payload.template_id)
  49. rendered = renderer.render_from_record(record, payload.parameters)
  50. return {"rendered_text": rendered}
  51. @app.post("/api/templates/preview", response_model=TemplateRenderResponse)
  52. async def preview_template(payload: TemplatePreviewRequest):
  53. rendered = renderer.preview(payload)
  54. return {"rendered_text": rendered}
  55. return app
  56. app = create_app()