"""User session database model for tracking active sessions.""" import uuid from sqlalchemy import Column, String, Boolean, ForeignKey, Text from sqlalchemy.sql import func from sqlalchemy.types import DateTime from app.db.base import Base class UserSession(Base): """User session model for tracking active sessions.""" __tablename__ = "user_sessions" id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) # User user_id = Column(String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True) # Token hash (to identify and revoke specific sessions) token_hash = Column(String(64), unique=True, nullable=False, index=True) # Device/client info device_name = Column(String(200), nullable=True) # User-friendly name device_type = Column(String(50), nullable=True) # desktop, mobile, tablet browser = Column(String(100), nullable=True) os = Column(String(100), nullable=True) user_agent = Column(String(500), nullable=True) # Location info ip_address = Column(String(45), nullable=True) location = Column(String(200), nullable=True) # City, Country # Status is_active = Column(Boolean, default=True, nullable=False) is_current = Column(Boolean, default=False, nullable=False) # Marks the current session # Timestamps created_at = Column(DateTime, server_default=func.now(), nullable=False, index=True) last_active_at = Column(DateTime, server_default=func.now(), nullable=False) expires_at = Column(DateTime, nullable=True) revoked_at = Column(DateTime, nullable=True) def __repr__(self): return f""