from sqlalchemy import Column, DateTime, String, Text from app import db from .base import TimestampMixin, default_uuid class KioskDevice(db.Model, TimestampMixin): """Persistent registry of kiosk terminals.""" __tablename__ = "kiosk_device" id = Column(String(36), primary_key=True, default=default_uuid) device_fingerprint = Column(String(255), nullable=True) display_name = Column(String(120), nullable=False, default="terminal") status = Column(String(20), nullable=False, default="pending") # pending|active|revoked access_slug = Column(String(64), nullable=True, unique=True, index=True) last_seen_at = Column(DateTime, nullable=True) last_ip = Column(String(45), nullable=True) class KioskPairToken(db.Model): """One-time short-lived token for QR pairing.""" __tablename__ = "kiosk_pair_token" id = Column(String(36), primary_key=True, default=default_uuid) token = Column(String(255), nullable=False, unique=True, index=True) device_id = Column(String(36), nullable=False, index=True) expires_at = Column(DateTime, nullable=False) used_at = Column(DateTime, nullable=True) issued_for = Column(Text, nullable=True)