routes.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from fastapi import APIRouter, Query
  2. from app.core.config import settings
  3. from app.scheduler.manager import scheduler
  4. from app.services.demand_pool_service import (
  5. query_demand_pool_records,
  6. query_strategy_options,
  7. )
  8. router = APIRouter()
  9. @router.get("/health")
  10. async def health_check() -> dict[str, str]:
  11. return {"status": "ok", "service": settings.app_name, "env": settings.app_env}
  12. @router.get("/scheduler/status")
  13. async def scheduler_status() -> dict[str, object]:
  14. jobs = scheduler.get_jobs()
  15. return {
  16. "running": scheduler.running,
  17. "job_count": len(jobs),
  18. "jobs": [job.id for job in jobs],
  19. }
  20. @router.get("/demand-pool")
  21. async def query_demand_pool(
  22. strategy: list[str] | None = Query(default=None, description="策略,支持多选"),
  23. start_dt: str | None = Query(default=None, description="开始日期: yyyymmdd 或 yyyy-mm-dd"),
  24. end_dt: str | None = Query(default=None, description="结束日期: yyyymmdd 或 yyyy-mm-dd"),
  25. min_weight: float | None = Query(default=None, description="最小权重"),
  26. max_weight: float | None = Query(default=None, description="最大权重"),
  27. sort_by: str | None = Query(default="weight", description="排序字段"),
  28. sort_order: str | None = Query(default="desc", description="排序方向: asc 或 desc"),
  29. page: int = Query(default=1, ge=1, description="页码,从 1 开始"),
  30. page_size: int = Query(default=20, ge=1, le=200, description="每页条数"),
  31. ) -> dict[str, object]:
  32. return query_demand_pool_records(
  33. strategies=strategy,
  34. start_dt=start_dt,
  35. end_dt=end_dt,
  36. min_weight=min_weight,
  37. max_weight=max_weight,
  38. sort_by=sort_by,
  39. sort_order=sort_order,
  40. page=page,
  41. page_size=page_size,
  42. )
  43. @router.get("/demand-pool/strategies")
  44. async def get_demand_pool_strategies(
  45. start_dt: str | None = Query(default=None, description="开始日期: yyyymmdd 或 yyyy-mm-dd"),
  46. end_dt: str | None = Query(default=None, description="结束日期: yyyymmdd 或 yyyy-mm-dd"),
  47. min_weight: float | None = Query(default=None, description="最小权重"),
  48. max_weight: float | None = Query(default=None, description="最大权重"),
  49. ) -> dict[str, object]:
  50. return query_strategy_options(
  51. start_dt=start_dt,
  52. end_dt=end_dt,
  53. min_weight=min_weight,
  54. max_weight=max_weight,
  55. )