printer.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from datetime import datetime
  2. from sqlalchemy import String, Boolean, DateTime, Float, func
  3. from sqlalchemy.orm import Mapped, mapped_column, relationship
  4. from backend.app.core.database import Base
  5. class Printer(Base):
  6. __tablename__ = "printers"
  7. id: Mapped[int] = mapped_column(primary_key=True)
  8. name: Mapped[str] = mapped_column(String(100))
  9. serial_number: Mapped[str] = mapped_column(String(50), unique=True)
  10. ip_address: Mapped[str] = mapped_column(String(45))
  11. access_code: Mapped[str] = mapped_column(String(20))
  12. model: Mapped[str | None] = mapped_column(String(50))
  13. nozzle_count: Mapped[int] = mapped_column(default=1) # 1 or 2, auto-detected from MQTT
  14. is_active: Mapped[bool] = mapped_column(Boolean, default=True)
  15. auto_archive: Mapped[bool] = mapped_column(Boolean, default=True)
  16. print_hours_offset: Mapped[float] = mapped_column(Float, default=0.0) # Baseline hours to add
  17. created_at: Mapped[datetime] = mapped_column(
  18. DateTime, server_default=func.now()
  19. )
  20. updated_at: Mapped[datetime] = mapped_column(
  21. DateTime, server_default=func.now(), onupdate=func.now()
  22. )
  23. # Relationships
  24. archives: Mapped[list["PrintArchive"]] = relationship(
  25. back_populates="printer", cascade="all, delete-orphan"
  26. )
  27. smart_plug: Mapped["SmartPlug | None"] = relationship(
  28. back_populates="printer", uselist=False
  29. )
  30. notification_providers: Mapped[list["NotificationProvider"]] = relationship(
  31. back_populates="printer"
  32. )
  33. maintenance_items: Mapped[list["PrinterMaintenance"]] = relationship(
  34. back_populates="printer", cascade="all, delete-orphan"
  35. )
  36. from backend.app.models.archive import PrintArchive # noqa: E402
  37. from backend.app.models.smart_plug import SmartPlug # noqa: E402
  38. from backend.app.models.notification import NotificationProvider # noqa: E402
  39. from backend.app.models.maintenance import PrinterMaintenance # noqa: E402