project.py 1.4 KB

1234567891011121314151617181920212223242526272829303132
  1. from datetime import datetime
  2. from sqlalchemy import String, Integer, DateTime, Text, func
  3. from sqlalchemy.orm import Mapped, mapped_column, relationship
  4. from backend.app.core.database import Base
  5. class Project(Base):
  6. """Project to group related prints (e.g., 'Voron Build' with multiple parts)."""
  7. __tablename__ = "projects"
  8. id: Mapped[int] = mapped_column(primary_key=True)
  9. name: Mapped[str] = mapped_column(String(255))
  10. description: Mapped[str | None] = mapped_column(Text, nullable=True)
  11. color: Mapped[str | None] = mapped_column(String(20), nullable=True) # Hex color for UI
  12. status: Mapped[str] = mapped_column(String(20), default="active") # active, completed, archived
  13. target_count: Mapped[int | None] = mapped_column(Integer, nullable=True) # Optional target number of prints
  14. # Timestamps
  15. created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
  16. updated_at: Mapped[datetime] = mapped_column(
  17. DateTime, server_default=func.now(), onupdate=func.now()
  18. )
  19. # Relationships
  20. archives: Mapped[list["PrintArchive"]] = relationship(back_populates="project")
  21. queue_items: Mapped[list["PrintQueueItem"]] = relationship(back_populates="project")
  22. from backend.app.models.archive import PrintArchive # noqa: E402
  23. from backend.app.models.print_queue import PrintQueueItem # noqa: E402