import uuid from datetime import datetime, timezone from sqlalchemy import DateTime, ForeignKey, Integer, UniqueConstraint from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.dialects.postgresql import UUID from app.core.database import Base class UserPinnedTree(Base): """Tracks which trees a user has pinned to their sidebar.""" __tablename__ = "user_pinned_trees" __table_args__ = ( UniqueConstraint('user_id', 'tree_id', name='uq_user_pinned_tree'), ) id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4 ) user_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True ) tree_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("trees.id", ondelete="CASCADE"), nullable=False, index=True ) display_order: Mapped[int] = mapped_column(Integer, nullable=False, default=0) pinned_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) )