diff --git a/src/crud.py b/src/crud.py index bfb61ca..5b0b664 100644 --- a/src/crud.py +++ b/src/crud.py @@ -1,14 +1,16 @@ -from sqlalchemy.orm import Session +from sqlalchemy import desc from sqlalchemy.dialects.postgresql import array +from sqlalchemy.orm import Session +from fastapi import HTTPException -from models import CourseProgress, HighScore, User from enums import MinigameEnum +from models import CourseProgress, HighScore, User from schemas.highscores import HighScoreCreate from schemas.users import UserCreate, UserHighScore -from sqlalchemy import desc DEFAULT_NR_HIGH_SCORES = 10 + def get_user_by_id(db: Session, user_id: int): return db.query(User).filter(User.user_id == user_id).first() @@ -30,7 +32,6 @@ def create_user(db: Session, user: UserCreate): def get_high_scores(db: Session, minigame: MinigameEnum, n_highest: int): - user_high_scores = [] if not n_highest: @@ -39,15 +40,33 @@ def get_high_scores(db: Session, minigame: MinigameEnum, n_highest: int): if not minigame: minigame = MinigameEnum.SpellingBee - high_scores = db.query(HighScore).filter(HighScore.minigame == minigame).order_by(desc(HighScore.score_value)).limit(n_highest).all() + high_scores = ( + db.query(HighScore) + .filter(HighScore.minigame == minigame) + .order_by(desc(HighScore.score_value)) + .limit(n_highest) + .all() + ) for high_score in high_scores: owner = db.query(User).filter(User.user_id == high_score.owner_id).first() - user_high_scores.append(UserHighScore(username = owner.username, score_value = high_score.score_value)) + user_high_scores.append( + UserHighScore(username=owner.username, score_value=high_score.score_value) + ) return user_high_scores def create_high_score(db: Session, high_score: HighScoreCreate): - old_high_score = db.query(HighScore).filter(HighScore.owner_id == high_score.owner_id, HighScore.minigame == high_score.minigame).first() + owner = db.query(User).filter(User.user_id == high_score.owner_id).first() + if not owner: + raise HTTPException(status_code=400, detail="User does not exist") + old_high_score = ( + db.query(HighScore) + .filter( + HighScore.owner_id == high_score.owner_id, + HighScore.minigame == high_score.minigame, + ) + .first() + ) if old_high_score: print("Older high score found") print(old_high_score.minigame) @@ -77,25 +96,3 @@ def create_high_score(db: Session, high_score: HighScoreCreate): db.refresh(db_high_score) return db_high_score -""" -db_high_score = HighScore( - score_value=high_score.score_value, - minigame=high_score.minigame, - owner_id=high_score.owner_id, -) -db.add(db_high_score) -db.commit() -db.refresh(db_high_score) -owner = db.query(User).filter(User.user_id == high_score.owner_id).first() -print("ID IS " + str(db_high_score.high_score_id) + " " + owner.username) -#owner.high_score_ids.append(db_high_score.high_score_id) -#db.add(owner) -#db.commit() -#owner.high_scores.append(db_high_score) -print("LIST OF IDS: " + str(owner.high_score_ids)) -#db.flush() -#db.refresh(owner) -#owner2 = db.query(User).filter(User.user_id == high_score.owner_id).first() -#print("LIST OF IDS: " + str(owner2.high_score_ids)) -return db_high_score -""" diff --git a/src/main.py b/src/main.py index 2782dde..c537154 100644 --- a/src/main.py +++ b/src/main.py @@ -5,9 +5,9 @@ from sqlalchemy.orm import Session import crud from database import SessionLocal, engine +from enums import MinigameEnum from models import Base from schemas import highscores, users -from enums import MinigameEnum app = FastAPI() @@ -42,7 +42,11 @@ async def create_user(user: users.UserCreate, db: Session = Depends(get_db)): @app.get("/highscores", response_model=List[users.UserHighScore]) -async def read_high_scores(db: Session = Depends(get_db), minigame: Optional[MinigameEnum] = None, n_highest: Optional[int] = None): +async def read_high_scores( + db: Session = Depends(get_db), + minigame: Optional[MinigameEnum] = None, + n_highest: Optional[int] = None, +): high_scores = crud.get_high_scores(db, minigame, n_highest) return high_scores diff --git a/src/schemas/highscores.py b/src/schemas/highscores.py index 45a8578..afec43f 100644 --- a/src/schemas/highscores.py +++ b/src/schemas/highscores.py @@ -18,5 +18,3 @@ class HighScore(HighScoreBase): class Config: orm_mode = True - -