app.py 2.2 KB

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