ams_label.py 1.4 KB

123456789101112131415161718192021222324252627282930
  1. """Model for storing user-defined friendly names for AMS units.
  2. Users can assign a custom label to each AMS (e.g. "Workshop AMS", "Silk Colours")
  3. that is displayed in place of or alongside the auto-generated label (AMS-A, HT-A, …).
  4. Labels are keyed by AMS serial number so they persist when the AMS is moved to a
  5. different printer. A fallback (printer_id + ams_id) is retained for units whose
  6. serial number is not yet known.
  7. """
  8. from datetime import datetime
  9. from sqlalchemy import DateTime, Integer, String, UniqueConstraint, func
  10. from sqlalchemy.orm import Mapped, mapped_column
  11. from backend.app.core.database import Base
  12. class AmsLabel(Base):
  13. """Maps an AMS unit serial number to a user-defined friendly name."""
  14. __tablename__ = "ams_labels"
  15. __table_args__ = (UniqueConstraint("ams_serial_number", name="uq_ams_label_serial"),)
  16. id: Mapped[int] = mapped_column(primary_key=True)
  17. ams_serial_number: Mapped[str] = mapped_column(String(50)) # AMS unit serial number (sn from MQTT)
  18. ams_id: Mapped[int | None] = mapped_column(Integer, nullable=True) # AMS unit ID hint (0, 1, 2, 3, 128…)
  19. label: Mapped[str] = mapped_column(String(100)) # User-defined friendly name
  20. created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
  21. updated_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), onupdate=func.now())