"""Slide model for the TV dashboard / screensaver slideshows.""" from datetime import datetime, timezone from shopdb.api import db def _utcnow(): # naive UTC to match the other DB DateTime columns (stored without tzinfo) return datetime.now(timezone.utc).replace(tzinfo=None) class TvSlide(db.Model): """One slide image in a surface's playlist. Image files live on disk at instance/slides//; this row holds the play order + per-slide duration. Files are the source of truth for existence - rows whose file is gone are ignored and pruned. """ __tablename__ = 'tvslides' slideid = db.Column(db.Integer, primary_key=True) surface = db.Column(db.String(20), nullable=False, index=True) filename = db.Column(db.String(255), nullable=False) sortorder = db.Column(db.Integer, default=0, nullable=False) seconds = db.Column(db.Integer, default=0, nullable=False) # 0 = use default interval uploadeddate = db.Column(db.DateTime, default=_utcnow) # No DB-level unique on (surface, filename): utf8mb4 pushes that index past # MySQL 5.6's 767-byte limit. Upload unique-renames, so dupes can't occur. __table_args__ = ( db.Index('idx_tvslide_surface', 'surface'), ) def to_dict(self): return { 'slideid': self.slideid, 'surface': self.surface, 'filename': self.filename, 'sortorder': self.sortorder, 'seconds': self.seconds, }