"""BoardImage junction model.""" import uuid from datetime import datetime from sqlalchemy import Column, DateTime, ForeignKey, Integer, UniqueConstraint from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import relationship from app.database.base import Base class BoardImage(Base): """Junction table connecting boards and images with position/transformation data.""" __tablename__ = "board_images" 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) image_id = Column(UUID(as_uuid=True), ForeignKey("images.id", ondelete="CASCADE"), nullable=False, index=True) position = Column(JSONB, nullable=False) transformations = Column( JSONB, nullable=False, default={ "scale": 1.0, "rotation": 0, "opacity": 1.0, "flipped_h": False, "flipped_v": False, "greyscale": False, }, ) z_order = Column(Integer, nullable=False, default=0, index=True) group_id = Column(UUID(as_uuid=True), ForeignKey("groups.id", ondelete="SET NULL"), nullable=True, index=True) created_at = Column(DateTime, nullable=False, default=datetime.utcnow) updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) __table_args__ = (UniqueConstraint("board_id", "image_id", name="uq_board_image"),) # Relationships board = relationship("Board", back_populates="board_images") image = relationship("Image", back_populates="board_images") group = relationship("Group", back_populates="board_images") def __repr__(self) -> str: return f""