126 lines
4.1 KiB
Python
126 lines
4.1 KiB
Python
import sys
|
|
from typing import List, Optional
|
|
|
|
from fastapi import Depends, FastAPI
|
|
from sqlalchemy.orm import Session
|
|
|
|
sys.path.append("..")
|
|
|
|
from src.crud import authentication as crud_authentication
|
|
from src.crud import courseprogress as crud_courseprogress
|
|
from src.crud import highscores as crud_highscores
|
|
from src.crud import saved_data as crud_saved_data
|
|
from src.crud import users as crud_users
|
|
from src.database import Base, engine, get_db
|
|
from src.enums import CourseEnum, MinigameEnum
|
|
from src.schemas import courseprogress, highscores, saved_data, users
|
|
|
|
app = FastAPI()
|
|
|
|
Base.metadata.create_all(bind=engine)
|
|
|
|
|
|
@app.get("/")
|
|
async def root():
|
|
return {"message": "Hello world!"}
|
|
|
|
|
|
@app.get("/allusers", response_model=List[users.User])
|
|
async def read_users(db: Session = Depends(get_db)):
|
|
return crud_users.get_users(db)
|
|
|
|
|
|
@app.get("/users", response_model=users.User)
|
|
async def read_user(
|
|
current_user_name: str = Depends(crud_authentication.get_current_user_name),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
return crud_users.get_user_by_username(db, current_user_name)
|
|
|
|
|
|
@app.patch("/users")
|
|
async def patch_current_user(
|
|
user: users.UserCreate,
|
|
current_user_name=Depends(crud_authentication.get_current_user_name),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
crud_users.patch_user(db, current_user_name, user)
|
|
|
|
|
|
@app.get("/saveddata", response_model=saved_data.SavedUser)
|
|
async def read_saved_data(
|
|
current_user_name: str = Depends(crud_authentication.get_current_user_name),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
return crud_saved_data.get_saved_data(db, current_user_name)
|
|
|
|
|
|
@app.post("/register")
|
|
async def register(user: users.UserCreate, db: Session = Depends(get_db)):
|
|
access_token = crud_authentication.register(
|
|
db, user.username, user.password, user.avatar_index
|
|
)
|
|
user = crud_users.get_user_by_username(db, user.username)
|
|
crud_courseprogress.initialize_user(db, user)
|
|
return access_token
|
|
|
|
|
|
@app.post("/login")
|
|
async def login(user: users.UserCreate, db: Session = Depends(get_db)):
|
|
return crud_authentication.login(db, user.username, user.password)
|
|
|
|
|
|
@app.get("/highscores/{minigame}", response_model=List[highscores.Score])
|
|
async def get_high_scores(
|
|
minigame: MinigameEnum,
|
|
amount: Optional[int] = 1,
|
|
mine_only: Optional[bool] = True,
|
|
most_recent: Optional[bool] = False,
|
|
current_user_name: str = Depends(crud_authentication.get_current_user_name),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
if most_recent:
|
|
return crud_highscores.get_most_recent_high_scores(db, minigame, amount)
|
|
user = crud_users.get_user_by_username(db, current_user_name)
|
|
return crud_highscores.get_highest_high_scores(
|
|
db, minigame, user, amount, mine_only
|
|
)
|
|
|
|
|
|
@app.put("/highscores/{minigame}", response_model=highscores.HighScore)
|
|
async def create_high_score(
|
|
minigame: MinigameEnum,
|
|
high_score: highscores.HighScoreBase,
|
|
current_user_name: str = Depends(crud_authentication.get_current_user_name),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
current_user = crud_users.get_user_by_username(db, current_user_name)
|
|
return crud_highscores.create_high_score(db, current_user, minigame, high_score)
|
|
|
|
|
|
@app.get(
|
|
"/courseprogress/{course}", response_model=List[courseprogress.CourseProgressParent]
|
|
)
|
|
async def get_course_progress(
|
|
course: Optional[CourseEnum] = CourseEnum.All,
|
|
current_user_name: str = Depends(crud_authentication.get_current_user_name),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
current_user = crud_users.get_user_by_username(db, current_user_name)
|
|
return crud_courseprogress.get_course_progress(db, current_user, course)
|
|
|
|
|
|
@app.patch(
|
|
"/courseprogress/{course}", response_model=List[courseprogress.CourseProgressParent]
|
|
)
|
|
async def patch_course_progress(
|
|
course: CourseEnum,
|
|
course_progress: courseprogress.CourseProgressBase,
|
|
current_user_name: str = Depends(crud_authentication.get_current_user_name),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
current_user = crud_users.get_user_by_username(db, current_user_name)
|
|
return crud_courseprogress.patch_course_progress(
|
|
db, current_user, course, course_progress
|
|
)
|