Work on high score endpoints

This commit is contained in:
lvrossem
2023-03-29 11:24:25 -06:00
parent fa543b19e7
commit 41e6be454a
4 changed files with 83 additions and 25 deletions

View File

@@ -1,9 +1,13 @@
from sqlalchemy.orm import Session
from sqlalchemy.dialects.postgresql import array
from models import CourseProgress, HighScore, User
from enums import MinigameEnum
from schemas.highscores import HighScoreCreate
from schemas.users import UserCreate
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()
@@ -25,26 +29,73 @@ def create_user(db: Session, user: UserCreate):
return db_user
def get_high_scores(db: Session):
return db.query(HighScore).all()
def get_high_scores(db: Session, minigame: MinigameEnum, n_highest: int):
user_high_scores = []
if not n_highest:
n_highest = DEFAULT_NR_HIGH_SCORES
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()
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))
return user_high_scores
def create_high_score(db: Session, high_score: HighScoreCreate):
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 = get_user_by_id(db, high_score.owner_id)
print("ID IS " + str(db_high_score.high_score_id) + " " + owner.username)
owner.high_score_ids.append(db_high_score.high_score_id)
owner.high_scores.append(db_high_score)
print("LIST OF IDS: " + str(owner.high_score_ids))
db.commit()
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
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)
if old_high_score.score_value < high_score.score_value:
print("Older score is lower")
db_high_score = HighScore(
score_value=high_score.score_value,
minigame=high_score.minigame,
owner_id=high_score.owner_id,
)
db.delete(old_high_score)
db.add(db_high_score)
db.commit()
db.refresh(db_high_score)
return db_high_score
else:
print("Older score is higher")
return old_high_score
else:
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)
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
"""