"""Player model for digital signage players.""" from datetime import datetime from typing import Optional, List from app.extensions import db class Player(db.Model): """Player model representing a digital signage device. Attributes: id: Primary key name: Display name for the player location: Physical location description auth_code: Authentication code for API access group_id: Foreign key to assigned group status: Current player status (online, offline, error) last_seen: Last activity timestamp created_at: Player creation timestamp """ __tablename__ = 'player' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255), nullable=False) location = db.Column(db.String(255), nullable=True) auth_code = db.Column(db.String(255), unique=True, nullable=False, index=True) group_id = db.Column(db.Integer, db.ForeignKey('group.id'), nullable=True, index=True) status = db.Column(db.String(50), default='offline', index=True) last_seen = db.Column(db.DateTime, nullable=True, index=True) created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) # Relationships group = db.relationship('Group', back_populates='players') feedback = db.relationship('PlayerFeedback', back_populates='player', cascade='all, delete-orphan', lazy='dynamic') def __repr__(self) -> str: """String representation of Player.""" return f'' @property def is_online(self) -> bool: """Check if player is online (seen in last 5 minutes).""" if not self.last_seen: return False delta = datetime.utcnow() - self.last_seen return delta.total_seconds() < 300 # 5 minutes def update_status(self, status: str) -> None: """Update player status and last seen timestamp. Args: status: New status value """ self.status = status self.last_seen = datetime.utcnow()