Browse Source

Add recent games endpoint

Kirk Trombley 4 years ago
parent
commit
3b8a90e52a
4 changed files with 24 additions and 1 deletions
  1. 4 0
      README.md
  2. 13 1
      server/app/api/other.py
  3. 1 0
      server/app/db/models.py
  4. 6 0
      server/app/db/queries.py

+ 4 - 0
README.md

@@ -45,6 +45,10 @@ GET /generators
             }
         ]
     }
+GET /recent
+    Returns 200 and {
+        "recentGames": [ string ]
+    }
 PUT /game
     Accepts {
         "timer": number,

+ 13 - 1
server/app/api/other.py

@@ -1,11 +1,14 @@
 from typing import List
 
-from fastapi import APIRouter
+from fastapi import APIRouter, Depends
 from fastapi_camelcase import CamelModel
 from pydantic import confloat
 
+from sqlalchemy.orm import Session
+
 from .. import scoring
 from ..schemas import CacheInfo, GeneratorInfo
+from ..db import get_db, queries
 from ..point_gen import points, generator_info
 
 router = APIRouter()
@@ -34,6 +37,10 @@ class GeneratorResponse(CamelModel):
     generators: List[GeneratorInfo]
 
 
+class RecentResponse(CamelModel):
+    recent_games: List[str]
+
+
 @router.get("/health")
 def health():
     return { "status": "healthy", "version": "3.0" }
@@ -53,3 +60,8 @@ def caches():
 @router.get("/generators", response_model=GeneratorResponse)
 def generators():
     return GeneratorResponse(generators=generator_info)
+
+
+@router.get("/recent", response_model=RecentResponse)
+def recent(db: Session = Depends(get_db)):
+    return RecentResponse(recent_games=[g.game_id for g in queries.get_recent_games(db, 5)])

+ 1 - 0
server/app/db/models.py

@@ -16,6 +16,7 @@ class Game(Base):
     country_lock = Column(String)
     generation_method = Column(String)
     rule_set = Column(String)
+    created_at = Column(DateTime)
     coordinates = relationship("Coordinate", lazy=True, order_by="Coordinate.round_number")
     players = relationship("Player", lazy=True, backref="game")
 

+ 6 - 0
server/app/db/queries.py

@@ -1,5 +1,6 @@
 import uuid
 from typing import List, Tuple
+from datetime import datetime
 
 from sqlalchemy.orm import Session
 
@@ -23,6 +24,7 @@ def create_game(db: Session, conf: schemas.GameConfig, coords: List[Tuple[str, f
         country_lock=conf.country_lock,
         generation_method=conf.generation_method,
         rule_set=conf.rule_set,
+        created_at=datetime.now(),
     )
     db.add(new_game)
     db.add_all([Coordinate(
@@ -37,6 +39,10 @@ def create_game(db: Session, conf: schemas.GameConfig, coords: List[Tuple[str, f
     return game_id
 
 
+def get_recent_games(db: Session, count: int) -> List[Game]:
+    return db.query(Game).order_by(Game.created_at).limit(count).all()
+
+
 def get_game(db: Session, game_id: str) -> Game:
     return db.query(Game).get(game_id)