Throw error at POST /highscores if user does not exist
This commit is contained in:
55
src/crud.py
55
src/crud.py
@@ -1,14 +1,16 @@
|
|||||||
from sqlalchemy.orm import Session
|
from sqlalchemy import desc
|
||||||
from sqlalchemy.dialects.postgresql import array
|
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 enums import MinigameEnum
|
||||||
|
from models import CourseProgress, HighScore, User
|
||||||
from schemas.highscores import HighScoreCreate
|
from schemas.highscores import HighScoreCreate
|
||||||
from schemas.users import UserCreate, UserHighScore
|
from schemas.users import UserCreate, UserHighScore
|
||||||
from sqlalchemy import desc
|
|
||||||
|
|
||||||
DEFAULT_NR_HIGH_SCORES = 10
|
DEFAULT_NR_HIGH_SCORES = 10
|
||||||
|
|
||||||
|
|
||||||
def get_user_by_id(db: Session, user_id: int):
|
def get_user_by_id(db: Session, user_id: int):
|
||||||
return db.query(User).filter(User.user_id == user_id).first()
|
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):
|
def get_high_scores(db: Session, minigame: MinigameEnum, n_highest: int):
|
||||||
|
|
||||||
user_high_scores = []
|
user_high_scores = []
|
||||||
|
|
||||||
if not n_highest:
|
if not n_highest:
|
||||||
@@ -39,15 +40,33 @@ def get_high_scores(db: Session, minigame: MinigameEnum, n_highest: int):
|
|||||||
if not minigame:
|
if not minigame:
|
||||||
minigame = MinigameEnum.SpellingBee
|
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:
|
for high_score in high_scores:
|
||||||
owner = db.query(User).filter(User.user_id == high_score.owner_id).first()
|
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
|
return user_high_scores
|
||||||
|
|
||||||
|
|
||||||
def create_high_score(db: Session, high_score: HighScoreCreate):
|
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:
|
if old_high_score:
|
||||||
print("Older high score found")
|
print("Older high score found")
|
||||||
print(old_high_score.minigame)
|
print(old_high_score.minigame)
|
||||||
@@ -77,25 +96,3 @@ def create_high_score(db: Session, high_score: HighScoreCreate):
|
|||||||
db.refresh(db_high_score)
|
db.refresh(db_high_score)
|
||||||
return 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
|
|
||||||
"""
|
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ from sqlalchemy.orm import Session
|
|||||||
|
|
||||||
import crud
|
import crud
|
||||||
from database import SessionLocal, engine
|
from database import SessionLocal, engine
|
||||||
|
from enums import MinigameEnum
|
||||||
from models import Base
|
from models import Base
|
||||||
from schemas import highscores, users
|
from schemas import highscores, users
|
||||||
from enums import MinigameEnum
|
|
||||||
|
|
||||||
app = FastAPI()
|
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])
|
@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)
|
high_scores = crud.get_high_scores(db, minigame, n_highest)
|
||||||
return high_scores
|
return high_scores
|
||||||
|
|
||||||
|
|||||||
@@ -18,5 +18,3 @@ class HighScore(HighScoreBase):
|
|||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user