printer.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from datetime import datetime
  2. from sqlalchemy import String, Boolean, DateTime, 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. created_at: Mapped[datetime] = mapped_column(
  17. DateTime, server_default=func.now()
  18. )
  19. updated_at: Mapped[datetime] = mapped_column(
  20. DateTime, server_default=func.now(), onupdate=func.now()
  21. )
  22. # Relationships
  23. archives: Mapped[list["PrintArchive"]] = relationship(
  24. back_populates="printer", cascade="all, delete-orphan"
  25. )
  26. smart_plug: Mapped["SmartPlug | None"] = relationship(
  27. back_populates="printer", uselist=False
  28. )
  29. notification_providers: Mapped[list["NotificationProvider"]] = relationship(
  30. back_populates="printer"
  31. )
  32. from backend.app.models.archive import PrintArchive # noqa: E402
  33. from backend.app.models.smart_plug import SmartPlug # noqa: E402
  34. from backend.app.models.notification import NotificationProvider # noqa: E402