""" Session model for managing user authentication sessions """ from sqlalchemy import Column, String, Boolean, DateTime, ForeignKey from sqlalchemy.dialects.postgresql import UUID, INET from sqlalchemy.orm import relationship from sqlalchemy.sql import func import uuid from app.database import Base class Session(Base): """ Session model for tracking user authentication sessions """ __tablename__ = "sessions" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True) user_id = Column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True ) # Token hashes (never store plain tokens) access_token_hash = Column(String(255), nullable=False) refresh_token_hash = Column(String(255)) # Session validity expires_at = Column(DateTime(timezone=True), nullable=False, index=True) is_active = Column(Boolean, default=True, nullable=False) # Timestamps created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) last_activity_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) # Client information ip_address = Column(INET) user_agent = Column(String) # Relationships user = relationship("User", back_populates="sessions") def __repr__(self): return f""