From b16198a816d97cdf0f957988ad60b2018343d194 Mon Sep 17 00:00:00 2001 From: lvrossem Date: Mon, 27 Mar 2023 17:24:33 +0200 Subject: [PATCH] Start working on database models --- src/database.py | 12 ++++++++++++ src/enums.py | 11 +++++++++++ src/models.py | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 src/database.py create mode 100644 src/enums.py create mode 100644 src/models.py diff --git a/src/database.py b/src/database.py new file mode 100644 index 0000000..16e67b5 --- /dev/null +++ b/src/database.py @@ -0,0 +1,12 @@ +from sqlalchemy import create_engine +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" + +engine = create_engine(SQLALCHEMY_DATABASE_URL) + +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + +Base = declarative_base() \ No newline at end of file diff --git a/src/enums.py b/src/enums.py new file mode 100644 index 0000000..036aabd --- /dev/null +++ b/src/enums.py @@ -0,0 +1,11 @@ +from enum import Enum + +class MinigameEnum(str, Enum): + SpellingBee = 'SpellingBee' + Hangman = 'Hangman' + JustSign = 'JustSign' + + +class CourseEnum(str, Enum): + Fingerspelling = 'Fingerspelling' + Animals = 'Animals' \ No newline at end of file diff --git a/src/models.py b/src/models.py new file mode 100644 index 0000000..7982cc6 --- /dev/null +++ b/src/models.py @@ -0,0 +1,34 @@ +from sqlalchemy import Boolean, Column, ForeignKey, Integer, String +from sqlalchemy.orm import relationship + +from .enums import MinigameEnum, CourseEnum +from .database import Base + + +class User(Base): + __tablename__ = "users" + + user_id = Column(Integer, primary_key=True, index=True) + username = Column(String, unique=True, index=True, nullable=False) + hashed_password = Column(String, nullable=False) + + high_scores = relationship("HighScore", back_populates="owner") + course_progresses = relationship("CourseProgress", back_populates="owner") + + +class HighScore(Base): + __tablename__ = "high_scores" + + high_score_id = Column(Integer, primary_key=True, index=True) + score_value = Column(Integer, nullable=False) + minigame = Column(Enum(MinigameEnum), nullable=False) + owner = Column(Integer, ForeignKey("users.user_id")) + + +class CourseProgress(Base): + __tablename__ = "course_progress" + + course_progress_id = Column(Integer, primary_key=True, index=True) + course = Column(Enum(CourseEnum), nullable=False) + owner = Column(Integer, ForeignKey("users.user_id")) + \ No newline at end of file