32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
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)
|