Add CRUD functions and Pydantic schemas
This commit is contained in:
25
src/crud.py
Normal file
25
src/crud.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from models import User, HighScore, CourseProgress
|
||||
from . import models, schemas
|
||||
|
||||
|
||||
def get_user(db: Session, user_id: int):
|
||||
return db.query(models.User).filter(models.User.id == user_id).first()
|
||||
|
||||
|
||||
def get_user_by_username(db: Session, username: str):
|
||||
return db.query(User).filter(User.email == email).first()
|
||||
|
||||
|
||||
def get_users(db: Session, skip: int = 0, limit: int = 100):
|
||||
return db.query(User).all()
|
||||
|
||||
|
||||
def create_user(db: Session, username: str, hashed_password: str):
|
||||
db_user = models.User(username=username, hashed_password=hashed_password)
|
||||
db.add(db_user)
|
||||
db.commit()
|
||||
db.refresh(db_user)
|
||||
return db_user
|
||||
|
||||
@@ -3,7 +3,7 @@ from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
# SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"
|
||||
SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
|
||||
SQLALCHEMY_DATABASE_URL = 'postgresql://user:password@postgresserver/wesign-dev'
|
||||
|
||||
engine = create_engine(SQLALCHEMY_DATABASE_URL)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
|
||||
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, Float
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from .enums import MinigameEnum, CourseEnum
|
||||
@@ -20,7 +20,7 @@ class HighScore(Base):
|
||||
__tablename__ = "high_scores"
|
||||
|
||||
high_score_id = Column(Integer, primary_key=True, index=True)
|
||||
score_value = Column(Integer, nullable=False)
|
||||
score_value = Column(Float, nullable=False)
|
||||
minigame = Column(Enum(MinigameEnum), nullable=False)
|
||||
owner = Column(Integer, ForeignKey("users.user_id"))
|
||||
|
||||
@@ -29,6 +29,7 @@ class CourseProgress(Base):
|
||||
__tablename__ = "course_progress"
|
||||
|
||||
course_progress_id = Column(Integer, primary_key=True, index=True)
|
||||
progress_value = Column(Float, nullable=False)
|
||||
course = Column(Enum(CourseEnum), nullable=False)
|
||||
owner = Column(Integer, ForeignKey("users.user_id"))
|
||||
|
||||
33
src/schemas.py
Normal file
33
src/schemas.py
Normal file
@@ -0,0 +1,33 @@
|
||||
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 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
|
||||
Reference in New Issue
Block a user