import uuid from datetime import datetime from sqlalchemy import String, DateTime, Boolean, Integer, Float, ForeignKey from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.dialects.postgresql import UUID from app.database import Base class ProductRenderPosition(Base): __tablename__ = "product_render_positions" id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) product_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("products.id", ondelete="CASCADE"), nullable=False, index=True ) name: Mapped[str] = mapped_column(String(200), nullable=False) rotation_x: Mapped[float] = mapped_column(Float, nullable=False, default=0.0) rotation_y: Mapped[float] = mapped_column(Float, nullable=False, default=0.0) rotation_z: Mapped[float] = mapped_column(Float, nullable=False, default=0.0) is_default: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) sort_order: Mapped[int] = mapped_column(Integer, nullable=False, default=0) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, nullable=False) updated_at: Mapped[datetime] = mapped_column( DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False ) product: Mapped["Product"] = relationship("Product", back_populates="render_positions") order_lines: Mapped[list["OrderLine"]] = relationship("OrderLine", back_populates="render_position")