diff --git a/src/crud.py b/src/crud.py index 6cf1849..104409e 100644 --- a/src/crud.py +++ b/src/crud.py @@ -1,10 +1,11 @@ from sqlalchemy.orm import Session from models import CourseProgress, HighScore, User +from schemas.highscores import HighScoreCreate from schemas.users import UserCreate -def get_user(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() @@ -22,3 +23,28 @@ def create_user(db: Session, user: UserCreate): db.commit() db.refresh(db_user) return db_user + + +def get_high_scores(db: Session): + return db.query(HighScore).all() + + +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 diff --git a/src/main.py b/src/main.py index 83cc2f1..89a1243 100644 --- a/src/main.py +++ b/src/main.py @@ -6,7 +6,7 @@ from sqlalchemy.orm import Session import crud from database import SessionLocal, engine from models import Base -from schemas import users +from schemas import highscores, users app = FastAPI() @@ -26,6 +26,12 @@ async def root(): return {"message": "Hello world!"} +@app.get("/users", response_model=List[users.User]) +async def read_users(db: Session = Depends(get_db)): + users = crud.get_users(db) + return users + + @app.post("/users", response_model=users.User) async def create_user(user: users.UserCreate, db: Session = Depends(get_db)): db_user = crud.get_user_by_username(db, username=user.username) @@ -34,7 +40,14 @@ async def create_user(user: users.UserCreate, db: Session = Depends(get_db)): return crud.create_user(db=db, user=user) -@app.get("/users", response_model=List[users.User]) -async def read_users(db: Session = Depends(get_db)): - users = crud.get_users(db) - return users +@app.get("/highscores", response_model=List[highscores.HighScore]) +async def read_high_scores(db: Session = Depends(get_db)): + high_scores = crud.get_high_scores(db) + return high_scores + + +@app.post("/highscores", response_model=highscores.HighScore) +async def create_high_score( + high_score: highscores.HighScoreCreate, db: Session = Depends(get_db) +): + return crud.create_high_score(db=db, high_score=high_score) diff --git a/src/schemas/highscores.py b/src/schemas/highscores.py index efe15de..afec43f 100644 --- a/src/schemas/highscores.py +++ b/src/schemas/highscores.py @@ -1,13 +1,20 @@ from pydantic import BaseModel -from src.enums import MinigameEnum +from enums import MinigameEnum -class HighScore(BaseModel): - high_score_id: int +class HighScoreBase(BaseModel): score_value: float minigame: MinigameEnum owner_id: int + +class HighScoreCreate(HighScoreBase): + pass + + +class HighScore(HighScoreBase): + high_score_id: int + class Config: orm_mode = True diff --git a/src/schemas/users.py b/src/schemas/users.py index f0cfda7..7543434 100644 --- a/src/schemas/users.py +++ b/src/schemas/users.py @@ -3,9 +3,12 @@ from typing import List from pydantic import BaseModel -class User(BaseModel): - user_id: int +class UserBase(BaseModel): username: str + + +class User(UserBase): + user_id: int hashed_password: str high_score_ids: List[int] = [] @@ -15,6 +18,5 @@ class User(BaseModel): orm_mode = True -class UserCreate(BaseModel): - username: str +class UserCreate(UserBase): password: str