
At this point it _should_ be just about usable for folks to poke-around in, though ugly as sin.
96 lines
2.8 KiB
Python
96 lines
2.8 KiB
Python
from sqlalchemy.orm import Session
|
|
|
|
from . import models, schemas
|
|
|
|
|
|
def get_player_by_id(db: Session, player_id: int):
|
|
return db.query(models.Player).filter(models.Player.id == player_id).first()
|
|
|
|
|
|
def get_players(db: Session, skip: int = 0, limit: int = 100):
|
|
return db.query(models.Player).offset(skip).limit(limit).all()
|
|
|
|
|
|
def create_player(db: Session, player: schemas.PlayerCreate):
|
|
db_player = models.Player(**player.model_dump())
|
|
db.add(db_player)
|
|
db.commit()
|
|
db.refresh(db_player)
|
|
return db_player
|
|
|
|
|
|
def delete_player_by_id(db: Session, player_id: int):
|
|
db.query(models.Player).filter(models.Player.id == player_id).delete()
|
|
db.commit()
|
|
|
|
|
|
def get_deck_by_id(db: Session, deck_id: int):
|
|
return db.query(models.Deck).filter(models.Deck.id == deck_id).first()
|
|
|
|
|
|
def get_decks(db: Session, skip: int = 0, limit: int = 100):
|
|
return db.query(models.Deck).offset(skip).limit(limit).all()
|
|
|
|
|
|
def create_deck(db: Session, deck: schemas.DeckCreate):
|
|
db_deck = models.Deck(**deck.model_dump())
|
|
db.add(db_deck)
|
|
db.commit()
|
|
db.refresh(db_deck)
|
|
return db_deck
|
|
|
|
|
|
def delete_deck_by_id(db: Session, deck_id: int):
|
|
db.query(models.Deck).filter(models.Deck.id == deck_id).delete()
|
|
db.commit()
|
|
return "", 204
|
|
|
|
|
|
def get_game_by_id(db: Session, game_id: int):
|
|
return db.query(models.Game).filter(models.Game.id == game_id).first()
|
|
|
|
|
|
def get_games(db: Session, skip: int = 0, limit: int = 100):
|
|
return db.query(models.Game).offset(skip).limit(limit).all()
|
|
|
|
|
|
def create_game(db: Session, game: schemas.GameCreate):
|
|
db_game = models.Game(**game.model_dump())
|
|
db.add(db_game)
|
|
db.commit()
|
|
db.refresh(db_game)
|
|
return db_game
|
|
|
|
|
|
def delete_game_by_id(db: Session, game_id: int):
|
|
db.query(models.Game).filter(models.Game.id == game_id).delete()
|
|
db.commit()
|
|
return "", 204
|
|
|
|
|
|
# Note - I'm _super_ new to FastAPI and have no idea about best practices - I don't know whether it's correct to put
|
|
# these "higher-level than basic CRUD, but still database-interacting" methods in `crud.py`, or if they should go
|
|
# elsewhere. Feedback welcome! (Lol as if anyone but me is ever going to actually look at this code :P )
|
|
|
|
|
|
def get_latest_score_for_deck(db: Session, deck_id: int):
|
|
scores = get_all_scores_for_deck(db, deck_id)
|
|
|
|
if scores:
|
|
return scores[0].score
|
|
else:
|
|
# Really we could pick any value as the initial rating for an as-yet-unplayed deck -
|
|
# scores are all relative, not absolutely, so any value would be appropriate!
|
|
# This was chosen just because it's a nice round number :)
|
|
return 1000.0
|
|
|
|
|
|
def get_all_scores_for_deck(db: Session, deck_id: int):
|
|
return (
|
|
db.query(models.EloScore)
|
|
.join(models.Game)
|
|
.filter(models.EloScore.deck_id == deck_id)
|
|
.order_by(models.Game.id.desc())
|
|
.all()
|
|
)
|