Add scores-by-date for deck
This commit is contained in:
parent
2ba4cf9a30
commit
b01831b5ac
@ -17,6 +17,14 @@ alter sequence players_id_seq restart with 1;
|
||||
alter sequence elo_scores_id_seq restart with 1;
|
||||
```
|
||||
|
||||
To make connection:
|
||||
|
||||
```
|
||||
k -n edh-elo port-forward svc/edh-elo-postgresql 5432:5432
|
||||
psql -U db_user -d postgres -h localhost
|
||||
|
||||
|
||||
|
||||
# To copy the database out to local
|
||||
|
||||
```
|
||||
|
@ -1,6 +1,7 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.sql.expression import func
|
||||
|
||||
from ..sql import crud, schemas
|
||||
from ..sql import crud, models, schemas
|
||||
from ..sql.database import get_db
|
||||
|
||||
api_router = APIRouter(prefix="/score", tags=["score"])
|
||||
@ -14,3 +15,30 @@ def get_latest_score_for_deck(deck_id: int, db=Depends(get_db)):
|
||||
@api_router.get("/{deck_id}/all", response_model=list[schemas.EloScore])
|
||||
def get_all_scores_for_deck(deck_id: int, db=Depends(get_db)):
|
||||
return crud.get_all_scores_for_deck(db, deck_id)
|
||||
|
||||
|
||||
@api_router.get("/{deck_id}/by_date")
|
||||
def get_scores_for_deck_by_date(deck_id: int, db=Depends(get_db)):
|
||||
row_number_column = (
|
||||
func.row_number()
|
||||
.over(
|
||||
partition_by=[models.Deck.name, models.Game.date],
|
||||
order_by=models.EloScore.id.desc(),
|
||||
)
|
||||
.label("row_number")
|
||||
)
|
||||
sub_query = (
|
||||
db.query(models.EloScore.score, models.Game.date)
|
||||
.filter(models.EloScore.deck_id == deck_id)
|
||||
.join(models.Game, models.EloScore.after_game_id == models.Game.id)
|
||||
# Necessary because the `row_number_column` makes the Deck table involved, so we need a join to avoid full
|
||||
# Cartesian join.
|
||||
.join(models.Deck, models.EloScore.deck_id == models.Deck.id)
|
||||
.add_column(row_number_column)
|
||||
)
|
||||
|
||||
sub_query = sub_query.subquery()
|
||||
query = db.query(sub_query).filter(sub_query.c.row_number == 1)
|
||||
results = query.all()
|
||||
|
||||
return list(map(lambda x: x._asdict(), results))
|
||||
|
Loading…
x
Reference in New Issue
Block a user