other.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from typing import List
  2. from fastapi import APIRouter, Depends
  3. from fastapi_camelcase import CamelModel
  4. from pydantic import confloat
  5. from sqlalchemy.orm import Session
  6. from .. import scoring
  7. from ..schemas import CacheInfo, GeneratorInfo
  8. from ..db import get_db, queries
  9. from ..point_gen import points, generator_info
  10. router = APIRouter()
  11. class Point(CamelModel):
  12. lat: confloat(ge=-90.0, le=90.0)
  13. lng: confloat(ge=-180.0, le=180.0)
  14. class ScoreCheck(CamelModel):
  15. point1: Point
  16. point2: Point
  17. class Score(CamelModel):
  18. distance: float
  19. score: int
  20. class CacheResponse(CamelModel):
  21. caches: List[CacheInfo]
  22. class GeneratorResponse(CamelModel):
  23. generators: List[GeneratorInfo]
  24. class RecentResponse(CamelModel):
  25. recent_games: List[str]
  26. @router.get("/health")
  27. def health():
  28. return { "status": "healthy", "version": "5.0" }
  29. @router.post("/score", response_model=Score)
  30. def check_score(points: ScoreCheck):
  31. score, distance = scoring.score((points.point1.lat, points.point1.lng), (points.point2.lat, points.point2.lng))
  32. return Score(distance=distance, score=score)
  33. @router.get("/caches", response_model=CacheResponse)
  34. def caches():
  35. return CacheResponse(caches=points.get_cache_info())
  36. @router.get("/generators", response_model=GeneratorResponse)
  37. def generators():
  38. return GeneratorResponse(generators=generator_info)
  39. @router.get("/recent", response_model=RecentResponse)
  40. def recent(db: Session = Depends(get_db)):
  41. return RecentResponse(recent_games=[g.game_id for g in queries.get_recent_games(db, 5)])