| | |
| | from datetime import datetime |
| |
|
| | from sqlalchemy import ( |
| | Column, |
| | Integer, |
| | String, |
| | Boolean, |
| | Text, |
| | ForeignKey, |
| | DateTime, |
| | ) |
| | from sqlalchemy.orm import relationship |
| |
|
| | from core.database import Base |
| |
|
| |
|
| | class Class(Base): |
| | __tablename__ = "classes" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| |
|
| | |
| | name = Column(String(255), nullable=False) |
| | description = Column(Text, nullable=True) |
| |
|
| | |
| | |
| | class_time = Column(String(8), nullable=False) |
| | |
| | days_of_week = Column(String(50), nullable=False) |
| |
|
| | classes_per_week = Column(Integer, nullable=False, default=1) |
| | max_students = Column(Integer, nullable=False, default=20) |
| | |
| | |
| | coach_email = Column(String(255), nullable=True, index=True) |
| | |
| | |
| | location = Column(Text, nullable=True) |
| |
|
| | |
| | is_active = Column(Boolean, default=True) |
| | created_at = Column(DateTime, default=datetime.utcnow) |
| | updated_at = Column( |
| | DateTime, |
| | default=datetime.utcnow, |
| | onupdate=datetime.utcnow, |
| | ) |
| |
|
| | |
| | |
| | enrollments = relationship( |
| | "ClassEnrollment", |
| | back_populates="class_", |
| | cascade="all, delete-orphan", |
| | ) |
| | |
| | membership_plans = relationship( |
| | "ClassMembershipPlan", |
| | back_populates="class_", |
| | cascade="all, delete-orphan", |
| | ) |
| |
|
| |
|
| | class ClassEnrollment(Base): |
| | __tablename__ = "class_enrollments" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| |
|
| | class_id = Column( |
| | Integer, |
| | ForeignKey("classes.id"), |
| | nullable=False, |
| | ) |
| |
|
| | |
| | student_id = Column( |
| | Integer, |
| | ForeignKey("students.id"), |
| | nullable=True, |
| | ) |
| |
|
| | student_email = Column(String(255), nullable=False) |
| | student_name = Column(String(255), nullable=True) |
| |
|
| | status = Column( |
| | String(20), |
| | default="invited", |
| | nullable=False, |
| | ) |
| |
|
| | invited_at = Column(DateTime, default=datetime.utcnow) |
| | joined_at = Column(DateTime, nullable=True) |
| | |
| | removed_at = Column(DateTime, nullable=True) |
| |
|
| | class_ = relationship("Class", back_populates="enrollments") |
| |
|
| |
|
| | class ClassMembershipPlan(Base): |
| | """Many-to-many relationship between classes and membership plans.""" |
| | __tablename__ = "class_membership_plans" |
| |
|
| | id = Column(Integer, primary_key=True, index=True) |
| | |
| | class_id = Column( |
| | Integer, |
| | ForeignKey("classes.id"), |
| | nullable=False, |
| | index=True, |
| | ) |
| | |
| | membership_plan_id = Column( |
| | Integer, |
| | ForeignKey("membership_plans.id"), |
| | nullable=False, |
| | index=True, |
| | ) |
| | |
| | created_at = Column(DateTime, default=datetime.utcnow) |
| | |
| | |
| | class_ = relationship("Class", back_populates="membership_plans") |
| |
|