sanbon / app /models /membership.py
Seth0330's picture
Update app/models/membership.py
6bae47d verified
from sqlalchemy import Column, Integer, String, DECIMAL, Date, DateTime, ForeignKey
from core.database import Base # absolute import
from sqlalchemy.orm import relationship
class Membership(Base):
__tablename__ = "memberships"
id = Column(Integer, primary_key=True, index=True)
user_email = Column(String(255), nullable=False)
user_name = Column(String(255), nullable=False) # Keep for backward compatibility, can be derived from first_name + last_name
plan_id = Column(Integer, ForeignKey("membership_plans.id"), nullable=True) # may be null if we can't match
plan_name = Column(String(255), nullable=False)
status = Column(String(50), nullable=False) # active, pending, expired, cancelled, paused
start_date = Column(Date, nullable=False)
renewal_date = Column(Date, nullable=False)
cancelled_at = Column(Date, nullable=True) # Date when membership was cancelled
paused_at = Column(Date, nullable=True) # Date when membership was paused
price = Column(DECIMAL(10, 2), nullable=False)
billing_period = Column(String(50), nullable=False)
max_students = Column(Integer, nullable=False, default=1) # Max students for this membership
last_login_at = Column(DateTime, nullable=True) # new field
# Member contact information (common for all students in this membership)
member_first_name = Column(String(255), nullable=True)
member_last_name = Column(String(255), nullable=True)
phone_number = Column(String(50), nullable=True)
emergency_contact_person = Column(String(255), nullable=True)
emergency_contact_number = Column(String(50), nullable=True)
# Relationship to students
students = relationship("Student", back_populates="membership", cascade="all, delete-orphan")