"""ShareLink model for board sharing functionality.""" import uuid from datetime import datetime from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from app.database.base import Base class ShareLink(Base): """ShareLink model representing shareable board links with permissions.""" __tablename__ = "share_links" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) board_id = Column(UUID(as_uuid=True), ForeignKey("boards.id", ondelete="CASCADE"), nullable=False) token = Column(String(64), unique=True, nullable=False, index=True) permission_level = Column(String(20), nullable=False) # 'view-only' or 'view-comment' created_at = Column(DateTime, nullable=False, default=datetime.utcnow) expires_at = Column(DateTime, nullable=True) last_accessed_at = Column(DateTime, nullable=True) access_count = Column(Integer, nullable=False, default=0) is_revoked = Column(Boolean, nullable=False, default=False) # Relationships board = relationship("Board", back_populates="share_links") comments = relationship("Comment", back_populates="share_link", cascade="all, delete-orphan") def __repr__(self) -> str: return f""