Minor stuff
This commit is contained in:
61
src/main.py
61
src/main.py
@@ -2,46 +2,19 @@ from typing import List, Optional
|
||||
|
||||
import jwt
|
||||
from fastapi import Depends, FastAPI, HTTPException
|
||||
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from crud import authentication as crud_authentication
|
||||
from crud import courseprogress as crud_courseprogress
|
||||
from crud import highscores as crud_highscores
|
||||
from crud import users as crud_users
|
||||
from database import SessionLocal, engine
|
||||
from database import SessionLocal, engine, get_db
|
||||
from enums import CourseEnum, MinigameEnum
|
||||
from models import Base
|
||||
from schemas import courseprogress, highscores, users
|
||||
|
||||
app = FastAPI()
|
||||
Base.metadata.create_all(bind=engine)
|
||||
bearer_scheme = HTTPBearer()
|
||||
|
||||
|
||||
def get_db():
|
||||
db = SessionLocal()
|
||||
try:
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
def get_current_user_name(
|
||||
token: HTTPAuthorizationCredentials = Depends(bearer_scheme),
|
||||
):
|
||||
try:
|
||||
payload = jwt.decode(
|
||||
token.credentials,
|
||||
crud_authentication.jwt_secret,
|
||||
algorithms=[crud_authentication.ALGORITHM],
|
||||
)
|
||||
username = payload.get("sub")
|
||||
if username is None:
|
||||
raise HTTPException(status_code=401, detail="Invalid JWT token")
|
||||
return username
|
||||
except jwt.exceptions.DecodeError:
|
||||
raise HTTPException(status_code=401, detail="Invalid JWT token")
|
||||
|
||||
|
||||
@app.get("/")
|
||||
@@ -57,15 +30,17 @@ async def read_users(db: Session = Depends(get_db)):
|
||||
@app.patch("/users")
|
||||
async def patch_current_user(
|
||||
user: users.UserCreate,
|
||||
current_user_name=Depends(get_current_user_name),
|
||||
db: Session = Depends(get_db)
|
||||
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.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)
|
||||
access_token = crud_authentication.register(
|
||||
db, user.username, user.password, user.avatar
|
||||
)
|
||||
user = crud_users.get_user_by_username(db, user.username)
|
||||
crud_courseprogress.initialize_user(db, user)
|
||||
return access_token
|
||||
@@ -80,7 +55,7 @@ async def login(user: users.UserCreate, db: Session = Depends(get_db)):
|
||||
async def get_high_scores(
|
||||
minigame: Optional[MinigameEnum] = None,
|
||||
nr_highest: Optional[int] = None,
|
||||
db: Session = Depends(get_db)
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
return crud_highscores.get_high_scores(db, minigame, nr_highest)
|
||||
|
||||
@@ -88,8 +63,8 @@ async def get_high_scores(
|
||||
@app.post("/highscores", response_model=highscores.HighScore)
|
||||
async def create_high_score(
|
||||
high_score: highscores.HighScoreBase,
|
||||
current_user_name = Depends(get_current_user_name),
|
||||
db: Session = Depends(get_db)
|
||||
current_user_name=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, high_score)
|
||||
@@ -99,15 +74,27 @@ async def create_high_score(
|
||||
|
||||
|
||||
@app.get("/protected")
|
||||
async def protected_route(current_user_name=Depends(get_current_user_name)):
|
||||
async def protected_route(
|
||||
current_user_name: str = Depends(crud_authentication.get_current_user_name),
|
||||
):
|
||||
return {"message": f"Hello, {current_user_name}!"}
|
||||
|
||||
|
||||
@app.get("/courseprogress", response_model=List[courseprogress.CourseProgressBase])
|
||||
async def get_course_progress(
|
||||
course: Optional[CourseEnum] = CourseEnum.All,
|
||||
current_user_name=Depends(get_current_user_name),
|
||||
db: Session = Depends(get_db)
|
||||
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")
|
||||
async def get_course_progress(
|
||||
current_user_name: str = Depends(crud_authentication.get_current_user_name),
|
||||
course: Optional[CourseEnum] = CourseEnum.All,
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user