Add CRUD functions and Pydantic schemas

This commit is contained in:
lvrossem
2023-03-27 19:48:48 +02:00
parent b16198a816
commit e9b2ea4188
4 changed files with 62 additions and 3 deletions

25
src/crud.py Normal file
View 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

View File

@@ -3,7 +3,7 @@ from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
# SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db" # 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) engine = create_engine(SQLALCHEMY_DATABASE_URL)

View File

@@ -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 sqlalchemy.orm import relationship
from .enums import MinigameEnum, CourseEnum from .enums import MinigameEnum, CourseEnum
@@ -20,7 +20,7 @@ class HighScore(Base):
__tablename__ = "high_scores" __tablename__ = "high_scores"
high_score_id = Column(Integer, primary_key=True, index=True) 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) minigame = Column(Enum(MinigameEnum), nullable=False)
owner = Column(Integer, ForeignKey("users.user_id")) owner = Column(Integer, ForeignKey("users.user_id"))
@@ -29,6 +29,7 @@ class CourseProgress(Base):
__tablename__ = "course_progress" __tablename__ = "course_progress"
course_progress_id = Column(Integer, primary_key=True, index=True) course_progress_id = Column(Integer, primary_key=True, index=True)
progress_value = Column(Float, nullable=False)
course = Column(Enum(CourseEnum), nullable=False) course = Column(Enum(CourseEnum), nullable=False)
owner = Column(Integer, ForeignKey("users.user_id")) owner = Column(Integer, ForeignKey("users.user_id"))

33
src/schemas.py Normal file
View 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