| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- from datetime import datetime
- from sqlalchemy import String, Boolean, DateTime, Float, func
- from sqlalchemy.orm import Mapped, mapped_column, relationship
- from backend.app.core.database import Base
- class Printer(Base):
- __tablename__ = "printers"
- id: Mapped[int] = mapped_column(primary_key=True)
- name: Mapped[str] = mapped_column(String(100))
- serial_number: Mapped[str] = mapped_column(String(50), unique=True)
- ip_address: Mapped[str] = mapped_column(String(45))
- access_code: Mapped[str] = mapped_column(String(20))
- model: Mapped[str | None] = mapped_column(String(50))
- location: Mapped[str | None] = mapped_column(String(100)) # Group/location name
- nozzle_count: Mapped[int] = mapped_column(default=1) # 1 or 2, auto-detected from MQTT
- is_active: Mapped[bool] = mapped_column(Boolean, default=True)
- auto_archive: Mapped[bool] = mapped_column(Boolean, default=True)
- print_hours_offset: Mapped[float] = mapped_column(Float, default=0.0) # Baseline hours to add
- 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="printer", cascade="all, delete-orphan"
- )
- smart_plug: Mapped["SmartPlug | None"] = relationship(
- back_populates="printer", uselist=False
- )
- notification_providers: Mapped[list["NotificationProvider"]] = relationship(
- back_populates="printer"
- )
- maintenance_items: Mapped[list["PrinterMaintenance"]] = relationship(
- back_populates="printer", cascade="all, delete-orphan"
- )
- from backend.app.models.archive import PrintArchive # noqa: E402
- from backend.app.models.smart_plug import SmartPlug # noqa: E402
- from backend.app.models.notification import NotificationProvider # noqa: E402
- from backend.app.models.maintenance import PrinterMaintenance # noqa: E402
|