"""Survey invite tracking for FlowPilot research.""" import secrets import uuid from datetime import datetime, timezone from sqlalchemy import Boolean, Column, DateTime, String from sqlalchemy.dialects.postgresql import UUID from app.core.database import Base def _generate_token() -> str: return secrets.token_urlsafe(16) class SurveyInvite(Base): __tablename__ = "survey_invites" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) token = Column(String(32), unique=True, nullable=False, default=_generate_token) recipient_name = Column(String(255), nullable=False) recipient_email = Column(String(255), nullable=True) status = Column(String(20), nullable=False, default="pending") email_sent = Column(Boolean, nullable=False, default=False) created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), nullable=False) completed_at = Column(DateTime(timezone=True), nullable=True)