Enough for today
This commit is contained in:
parent
765f3e9bef
commit
fc63176642
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,3 @@
|
||||
venv/*
|
||||
venv
|
||||
src/__pycache__*
|
||||
*__pycache__*
|
||||
15
src/crud.py
15
src/crud.py
@ -1,23 +1,22 @@
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from models import User, HighScore, CourseProgress
|
||||
from . import models, schemas
|
||||
|
||||
import schemas, models
|
||||
|
||||
def get_user(db: Session, user_id: int):
|
||||
return db.query(models.User).filter(models.User.id == user_id).first()
|
||||
return db.query(models.User).filter(models.User.user_id == user_id).first()
|
||||
|
||||
|
||||
def get_user_by_username(db: Session, username: str):
|
||||
return db.query(User).filter(User.email == email).first()
|
||||
return db.query(User).filter(models.User.username == username).first()
|
||||
|
||||
|
||||
def get_users(db: Session, skip: int = 0, limit: int = 100):
|
||||
return db.query(User).all()
|
||||
def get_users(db: Session):
|
||||
return db.query(models.User).all()
|
||||
|
||||
|
||||
def create_user(db: Session, username: str, hashed_password: str):
|
||||
db_user = models.User(username=username, hashed_password=hashed_password)
|
||||
def create_user(db: Session, user: schemas.users.UserCreate):
|
||||
db_user = models.User(username=user.username, hashed_password=user.hashed_password)
|
||||
db.add(db_user)
|
||||
db.commit()
|
||||
db.refresh(db_user)
|
||||
|
||||
20
src/enums.py
20
src/enums.py
@ -1,4 +1,24 @@
|
||||
from fastapi_utils.enums import StrEnum
|
||||
from sqlalchemy.types import TypeDecorator, Enum
|
||||
|
||||
|
||||
class StrEnumType(TypeDecorator):
|
||||
impl = Enum
|
||||
|
||||
def __init__(self, enum_class, **kw):
|
||||
self.enum_class = enum_class
|
||||
super().__init__(enum_class, **kw)
|
||||
|
||||
def process_bind_param(self, value, dialect):
|
||||
if value is None:
|
||||
return None
|
||||
return value.value
|
||||
|
||||
def process_result_value(self, value, dialect):
|
||||
if value is None:
|
||||
return None
|
||||
return self.enum_class(value)
|
||||
|
||||
|
||||
class MinigameEnum(StrEnum):
|
||||
SpellingBee = 'SpellingBee'
|
||||
|
||||
@ -2,7 +2,7 @@ from fastapi import Depends, FastAPI, HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
from models import Base
|
||||
from database import SessionLocal, engine
|
||||
from schemas import UserCreate
|
||||
from schemas.users import UserCreate, User
|
||||
import crud
|
||||
|
||||
app = FastAPI()
|
||||
@ -17,7 +17,7 @@ def get_db():
|
||||
db.close()
|
||||
|
||||
|
||||
@app.post("/users/", response_model=schemas.User)
|
||||
@app.post("/users/", response_model=User)
|
||||
def create_user(user: UserCreate, db: Session = Depends(get_db)):
|
||||
db_user = crud.get_user_by_email(db, email=user.email)
|
||||
if db_user:
|
||||
|
||||
@ -2,7 +2,7 @@ from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, Float
|
||||
from sqlalchemy.orm import relationship
|
||||
from enum import Enum
|
||||
|
||||
from enums import MinigameEnum, CourseEnum
|
||||
from enums import MinigameEnum, CourseEnum, StrEnumType
|
||||
from database import Base
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@ class HighScore(Base):
|
||||
|
||||
high_score_id = Column(Integer, primary_key=True, index=True)
|
||||
score_value = Column(Float, nullable=False)
|
||||
minigame = Column(Enum(MinigameEnum), nullable=False)
|
||||
minigame = Column(StrEnumType(MinigameEnum), nullable=False)
|
||||
owner = Column(Integer, ForeignKey("users.user_id"))
|
||||
|
||||
|
||||
@ -31,6 +31,6 @@ class CourseProgress(Base):
|
||||
|
||||
course_progress_id = Column(Integer, primary_key=True, index=True)
|
||||
progress_value = Column(Float, nullable=False)
|
||||
course = Column(Enum(CourseEnum), nullable=False)
|
||||
course = Column(StrEnumType(CourseEnum), nullable=False)
|
||||
owner = Column(Integer, ForeignKey("users.user_id"))
|
||||
|
||||
|
||||
@ -1,38 +0,0 @@
|
||||
from pydantic import BaseModel
|
||||
from enums import MinigameEnum, CourseEnum
|
||||
|
||||
class User(BaseModel):
|
||||
user_id: int
|
||||
username: str
|
||||
hashed_password: str
|
||||
|
||||
high_scores: list[HighScore] = []
|
||||
course_progresses: list[CourseProgress] = []
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class UserCreate(BaseModel):
|
||||
username: str
|
||||
password: str
|
||||
|
||||
|
||||
class HighScore(BaseModel):
|
||||
high_score_id: int
|
||||
score_value: float
|
||||
minigame: MinigameEnum
|
||||
owner: User
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class CourseProgress(BaseModel):
|
||||
course_progress_id: int
|
||||
progress_value: float
|
||||
course: CourseEnum
|
||||
owner: User
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
12
src/schemas/courseprogress.py
Normal file
12
src/schemas/courseprogress.py
Normal file
@ -0,0 +1,12 @@
|
||||
from pydantic import BaseModel
|
||||
from enums import CourseEnum
|
||||
|
||||
|
||||
class CourseProgress(BaseModel):
|
||||
course_progress_id: int
|
||||
progress_value: float
|
||||
course: CourseEnum
|
||||
owner: int
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
17
src/schemas/highscores.py
Normal file
17
src/schemas/highscores.py
Normal file
@ -0,0 +1,17 @@
|
||||
from pydantic import BaseModel
|
||||
from src.enums import MinigameEnum
|
||||
|
||||
|
||||
class HighScore(BaseModel):
|
||||
high_score_id: int
|
||||
score_value: float
|
||||
minigame: MinigameEnum
|
||||
owner_id: "User"
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
# It's ugly, but I have no choice
|
||||
from users import User
|
||||
HighScore.update_forward_refs()
|
||||
18
src/schemas/users.py
Normal file
18
src/schemas/users.py
Normal file
@ -0,0 +1,18 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
user_id: int
|
||||
username: str
|
||||
hashed_password: str
|
||||
|
||||
high_scores: list[int] = []
|
||||
course_progresses: list[int] = []
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class UserCreate(BaseModel):
|
||||
username: str
|
||||
password: str
|
||||
Loading…
x
Reference in New Issue
Block a user