notification_lock_screen_widget.py 1.2 KB

123456789101112131415161718192021222324252627
  1. """Durable ownership of one persistent Notify! widget per printer/provider."""
  2. from datetime import datetime
  3. from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint
  4. from backend.app.core.database import Base
  5. class NotificationLockScreenWidget(Base):
  6. __tablename__ = "notification_lock_screen_widgets"
  7. __table_args__ = (UniqueConstraint("provider_id", "printer_id"),)
  8. id = Column(Integer, primary_key=True)
  9. provider_id = Column(
  10. Integer, ForeignKey("notification_providers.id", ondelete="CASCADE"), nullable=False, index=True
  11. )
  12. # A removed printer must leave ownership intact until the remote DELETE succeeds.
  13. printer_id = Column(Integer, nullable=False, index=True)
  14. credential_key = Column(String(64), nullable=False)
  15. widget_id = Column(String(16), nullable=True)
  16. state = Column(String(20), nullable=False, default="pending")
  17. content = Column(Text, nullable=False, default="{}")
  18. failures = Column(Integer, nullable=False, default=0)
  19. next_attempt_at = Column(DateTime, nullable=True)
  20. last_sent_at = Column(DateTime, nullable=True)
  21. created_at = Column(DateTime, nullable=False, default=datetime.utcnow)