Files
webref/backend/app/database/models/board_image.py
Danilo Reyes a95a4c091a phase 3.1
2025-11-01 23:33:52 -06:00

49 lines
1.8 KiB
Python

"""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"<BoardImage(board_id={self.board_id}, image_id={self.image_id})>"