Files
back-end/src/models.py
2023-04-06 14:10:31 -06:00

49 lines
1.6 KiB
Python

from sqlalchemy import Column, Float, ForeignKey, Integer, String
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.orm import relationship
from src.database import Base
from src.enums import CourseEnum, MinigameEnum, StrEnumType
class User(Base):
"""The database model for users"""
__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)
avatar = Column(String, nullable=False)
high_scores = relationship(
"HighScore", back_populates="owner", cascade="all, delete", lazy="dynamic"
)
course_progress = relationship(
"CourseProgress", back_populates="owner", cascade="all, delete", lazy="dynamic"
)
class HighScore(Base):
"""The database model for high scores"""
__tablename__ = "high_scores"
high_score_id = Column(Integer, primary_key=True, index=True)
score_value = Column(Float, nullable=False)
minigame = Column(String, nullable=False)
owner_id = Column(Integer, ForeignKey("users.user_id"))
owner = relationship("User", back_populates="high_scores")
class CourseProgress(Base):
"""The database model for course progress"""
__tablename__ = "course_progress"
course_progress_id = Column(Integer, primary_key=True, index=True)
progress_value = Column(Float, nullable=False)
course = Column(String, nullable=False)
owner_id = Column(Integer, ForeignKey("users.user_id"))
owner = relationship("User", back_populates="course_progress")