153:class Recipient(Base, TimestampMixin): 154- __tablename__ = "recipients" 155- id = Column(Integer, primary_key=True) 156- list_id = Column(Integer, ForeignKey("recipient_lists.id", ondelete="CASCADE"), nullable=False, index=True) 157- email = Column(String(320), nullable=False, index=True) 158- first_name = Column(String(150), default="") 159- last_name = Column(String(150), default="") 160- company_name = Column(String(250), default="") 161- company_phone = Column(String(60), default="") 162- customer_email = Column(String(320), default="") 163- custom_fields = Column(JSON, default=dict) 164- # validation / status 165- status = Column(String(30), default="valid") # valid|invalid|duplicate|suppressed|bounced 166- validation_error = Column(Text, default="") 167- is_valid = Column(Boolean, default=True, nullable=False) 168- # unsubscribe token (unique secret per recipient) 169- unsub_token = Column(String(64), unique=True, nullable=False) 170- 171- list = relationship("RecipientList", back_populates="recipients") 172- 173- __table_args__ = (Index("ix_recipient_list_email", "list_id", "email"),) 174- 175- 141:class RecipientList(Base, TimestampMixin): 142- __tablename__ = "recipient_lists" 143- id = Column(Integer, primary_key=True) 144- user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True) 145- name = Column(String(200), nullable=False) 146- description = Column(Text, default="") 147- source = Column(String(30), default="manual") # manual|csv|txt 148- row_count = Column(Integer, default=0) 149- 150- recipients = relationship("Recipient", back_populates="list", cascade="all, delete-orphan") 151-