class SuppressionEntry(Base, TimestampMixin): __tablename__ = "suppression_list" id = Column(Integer, primary_key=True) email = Column(String(320), unique=True, nullable=False, index=True) reason = Column(String(50), default="unsubscribed") # unsubscribed|bounced|complaint|manual source = Column(String(200), default="") campaign_id = Column(Integer, ForeignKey("campaigns.id", ondelete="SET NULL")) user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE")) class SubjectLine(Base, TimestampMixin): === class RecipientList(Base, TimestampMixin): __tablename__ = "recipient_lists" id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True) name = Column(String(200), nullable=False) description = Column(Text, default="") source = Column(String(30), default="manual") # manual|csv|txt row_count = Column(Integer, default=0) recipients = relationship("Recipient", back_populates="list", cascade="all, delete-orphan") class Recipient(Base, TimestampMixin):