web_api.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. """前端取数接口:从 app.db 分页/筛选返回 query 与真实搜索结果。
  2. 挂到现有 FastAPI(creation_knowledge/api.py)。前端从「读死 json」改成调这些接口:
  3. GET /api/runs 有哪些批次
  4. GET /api/methods?table=queries|search 某表的打法清单(筛选下拉)
  5. GET /api/queries?method=&run_id=&page=&size=
  6. GET /api/search?platform=&method=&ok=&run_id=&page=&size=
  7. 每个请求开一个 sqlite 连接(轻、够用);连接出错时接口照常返回空集,不 500。
  8. """
  9. from __future__ import annotations
  10. from typing import Optional
  11. from fastapi import APIRouter, Query
  12. from acquisition import store
  13. router = APIRouter(prefix="/api")
  14. @router.get("/runs")
  15. def runs() -> dict:
  16. conn = store.connect()
  17. try:
  18. return {"runs": store.list_runs(conn)}
  19. finally:
  20. conn.close()
  21. @router.get("/methods")
  22. def methods(table: str = Query("queries")) -> dict:
  23. conn = store.connect()
  24. try:
  25. tbl = "search_results" if table == "search" else "queries"
  26. return {"methods": store.list_methods(conn, tbl)}
  27. finally:
  28. conn.close()
  29. @router.get("/queries")
  30. def queries(method: Optional[str] = None, run_id: Optional[str] = None,
  31. page: int = 1, size: int = 30) -> dict:
  32. conn = store.connect()
  33. try:
  34. return store.list_queries(conn, method=method, run_id=run_id, page=page, size=size)
  35. finally:
  36. conn.close()
  37. @router.get("/search")
  38. def search(platform: Optional[str] = None, method: Optional[str] = None,
  39. ok: Optional[bool] = None, run_id: Optional[str] = None,
  40. query: Optional[str] = None, page: int = 1, size: int = 30) -> dict:
  41. conn = store.connect()
  42. try:
  43. return store.list_search(conn, platform=platform, method=method, ok=ok,
  44. run_id=run_id, query=query, page=page, size=size)
  45. finally:
  46. conn.close()
  47. @router.get("/search/summary")
  48. def search_summary() -> dict:
  49. """{query文本: {total, ok}}——列表页据此给每条 query 显示「搜索结果」按钮与计数。"""
  50. conn = store.connect()
  51. try:
  52. return {"summary": store.search_summary(conn)}
  53. finally:
  54. conn.close()