app.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. """FastAPI application — category tree API on port 8080."""
  2. from __future__ import annotations
  3. from fastapi import FastAPI, HTTPException, Query
  4. from fastapi.middleware.cors import CORSMiddleware
  5. from api.services.category_tree import build_category_tree
  6. from api.services.demand_belong_category import list_demand_belong_categories
  7. from api.services.demand_videos import list_videos_for_demand_belong
  8. from api.services.oss_logs import list_demand_belong_oss_logs
  9. app = FastAPI(title="SupplyAgent API", version="0.1.0")
  10. app.add_middleware(
  11. CORSMiddleware,
  12. allow_origins=[
  13. "http://localhost:5173",
  14. "http://127.0.0.1:5173",
  15. "http://localhost:4173",
  16. "http://127.0.0.1:4173",
  17. ],
  18. allow_credentials=True,
  19. allow_methods=["*"],
  20. allow_headers=["*"],
  21. )
  22. @app.get("/health")
  23. def health() -> dict[str, str]:
  24. return {"status": "ok"}
  25. @app.get("/api/category-tree")
  26. def category_tree(
  27. biz_dt: str | None = Query(
  28. default=None,
  29. description="业务日 YYYYMMDD;省略则取 category_tree_weight 最新一日",
  30. ),
  31. ) -> dict:
  32. """Return nested global_tree_category with per-dim avg score."""
  33. return build_category_tree(biz_dt=biz_dt)
  34. @app.get("/api/demand-belong-category")
  35. def demand_belong_category() -> dict:
  36. """Return all active demand_belong_category rows in one response."""
  37. items = list_demand_belong_categories()
  38. return {"items": items}
  39. @app.get("/api/demand-belong-category/{belong_id}/videos")
  40. def demand_belong_videos(belong_id: int) -> dict:
  41. """Return videos linked to a demand_belong_category row (vid + title + final_topic_json)."""
  42. result = list_videos_for_demand_belong(belong_id)
  43. if result is None:
  44. raise HTTPException(status_code=404, detail="demand_belong_category not found")
  45. return result
  46. @app.get("/api/demand-belong-oss-logs")
  47. def demand_belong_oss_logs() -> dict:
  48. """Return demand_belong_category_agent oss_logs ordered by create_time desc."""
  49. items = list_demand_belong_oss_logs()
  50. return {"items": items}