notification_live_activity.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334
  1. """Durable ownership of Notify! tiles, including per-print dismissal tombstones."""
  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 NotificationLiveActivity(Base):
  6. __tablename__ = "notification_live_activities"
  7. __table_args__ = (UniqueConstraint("provider_id", "printer_id", "print_key"),)
  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. # Keep ownership after printer deletion until the worker ends the remote tile.
  13. printer_id = Column(Integer, nullable=False, index=True)
  14. print_key = Column(String(200), nullable=False)
  15. job_key = Column(String(160), nullable=True)
  16. print_name = Column(String(255), nullable=False, default="")
  17. eta_seconds = Column(Integer, nullable=True)
  18. eta_deadline = Column(DateTime, nullable=True)
  19. credential_key = Column(String(64), nullable=False)
  20. activity_id = Column(String(16), nullable=True)
  21. state = Column(String(20), nullable=False, default="pending")
  22. end_reason = Column(String(40), nullable=True)
  23. failures = Column(Integer, nullable=False, default=0)
  24. content = Column(Text, nullable=False, default="{}")
  25. expires_at = Column(DateTime, nullable=True)
  26. next_attempt_at = Column(DateTime, nullable=True)
  27. last_sent_at = Column(DateTime, nullable=True)
  28. created_at = Column(DateTime, nullable=False, default=datetime.utcnow)