from datetime import datetime from sqlalchemy import String, Integer, DateTime, Text, func from sqlalchemy.orm import Mapped, mapped_column, relationship from backend.app.core.database import Base class Project(Base): """Project to group related prints (e.g., 'Voron Build' with multiple parts).""" __tablename__ = "projects" id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(255)) description: Mapped[str | None] = mapped_column(Text, nullable=True) color: Mapped[str | None] = mapped_column(String(20), nullable=True) # Hex color for UI status: Mapped[str] = mapped_column(String(20), default="active") # active, completed, archived target_count: Mapped[int | None] = mapped_column(Integer, nullable=True) # Optional target number of prints # Timestamps created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now()) updated_at: Mapped[datetime] = mapped_column( DateTime, server_default=func.now(), onupdate=func.now() ) # Relationships archives: Mapped[list["PrintArchive"]] = relationship(back_populates="project") queue_items: Mapped[list["PrintQueueItem"]] = relationship(back_populates="project") from backend.app.models.archive import PrintArchive # noqa: E402 from backend.app.models.print_queue import PrintQueueItem # noqa: E402