| 1234567891011121314151617181920212223242526272829303132 |
- 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
|