From e9b2ea4188eae16b20c26b9a01f27a7609437ceb Mon Sep 17 00:00:00 2001 From: lvrossem Date: Mon, 27 Mar 2023 19:48:48 +0200 Subject: [PATCH] Add CRUD functions and Pydantic schemas --- src/crud.py | 25 +++++++++++++++++++++++++ src/database.py | 2 +- src/models.py | 5 +++-- src/schemas.py | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 src/crud.py create mode 100644 src/schemas.py diff --git a/src/crud.py b/src/crud.py new file mode 100644 index 0000000..77c25aa --- /dev/null +++ b/src/crud.py @@ -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 + diff --git a/src/database.py b/src/database.py index 16e67b5..e7d7dbe 100644 --- a/src/database.py +++ b/src/database.py @@ -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) diff --git a/src/models.py b/src/models.py index 7982cc6..4728139 100644 --- a/src/models.py +++ b/src/models.py @@ -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")) \ No newline at end of file diff --git a/src/schemas.py b/src/schemas.py new file mode 100644 index 0000000..9472883 --- /dev/null +++ b/src/schemas.py @@ -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 \ No newline at end of file