Throw error at POST /highscores if user does not exist

This commit is contained in:
lvrossem 2023-03-29 12:39:32 -06:00
parent 41e6be454a
commit 46a3f5858d
3 changed files with 32 additions and 33 deletions

View File

@ -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
"""

View File

@ -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

View File

@ -18,5 +18,3 @@ class HighScore(HighScoreBase):
class Config:
orm_mode = True