# app/modules/loyalty/models/apple_device.py """ Apple device registration database model. Tracks devices that have added an Apple Wallet pass for push notification updates when the pass changes. """ from sqlalchemy import ( Column, ForeignKey, Index, Integer, String, ) from sqlalchemy.orm import relationship from app.core.database import Base from models.database.base import TimestampMixin class AppleDeviceRegistration(Base, TimestampMixin): """ Apple Wallet device registration. When a user adds a pass to Apple Wallet, the device registers with us to receive push notifications when the pass updates. This implements the Apple Wallet Web Service for passbook updates: https://developer.apple.com/documentation/walletpasses/ """ __tablename__ = "apple_device_registrations" id = Column(Integer, primary_key=True, index=True) # Card relationship card_id = Column( Integer, ForeignKey("loyalty_cards.id", ondelete="CASCADE"), nullable=False, index=True, ) # Device identification device_library_identifier = Column( String(100), nullable=False, index=True, comment="Unique identifier for the device/library", ) # Push notification token push_token = Column( String(100), nullable=False, comment="APNs push token for this device", ) # ========================================================================= # Relationships # ========================================================================= card = relationship("LoyaltyCard", back_populates="apple_devices") # Indexes - unique constraint on device + card combination __table_args__ = ( Index( "idx_apple_device_card", "device_library_identifier", "card_id", unique=True, ), ) def __repr__(self) -> str: return ( f"" )