"""ShareLink model for board sharing.""" 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 for sharing boards with permission control.""" __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, index=True) 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, index=True) # Relationships board = relationship("Board", back_populates="share_links") comments = relationship("Comment", back_populates="share_link") def __repr__(self) -> str: return f""