other.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from typing import List
  2. from fastapi import APIRouter
  3. from fastapi_camelcase import CamelModel
  4. from pydantic import confloat
  5. from .. import scoring
  6. from ..schemas import CacheInfo, GeneratorInfo
  7. from ..point_gen import get_cache_info, get_generators
  8. router = APIRouter()
  9. class Point(CamelModel):
  10. lat: confloat(ge=-90.0, le=90.0)
  11. lng: confloat(ge=-180.0, le=180.0)
  12. class ScoreCheck(CamelModel):
  13. point1: Point
  14. point2: Point
  15. class Score(CamelModel):
  16. distance: float
  17. score: int
  18. class CacheResponse(CamelModel):
  19. caches: List[CacheInfo]
  20. class GeneratorResponse(CamelModel):
  21. generators: List[GeneratorInfo]
  22. @router.get("/health")
  23. def health():
  24. return { "status": "healthy", "version": "3.0" }
  25. @router.post("/score", response_model=Score)
  26. def check_score(points: ScoreCheck):
  27. score, distance = scoring.score((points.point1.lat, points.point1.lng), (points.point2.lat, points.point2.lng))
  28. return Score(distance=distance, score=score)
  29. @router.get("/caches", response_model=CacheResponse)
  30. def caches():
  31. return CacheResponse(caches=get_cache_info())
  32. @router.get("/generators", response_model=GeneratorResponse)
  33. def generators():
  34. return GeneratorResponse(generators=get_generators())