from datetime import datetime
from sqlalchemy import Column, String, DateTime, Boolean
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from uuid import uuid4
from app.models.database import Base
class UserSession(Base):
"""Model representing a user session.
A user session represents a continuous interaction with a user
and may contain multiple conversations.
"""
__tablename__ = "user_sessions"
id = Column(String, primary_key=True, default=lambda: str(uuid4()))
user_identifier = Column(String, nullable=True, index=True)
context = Column(String, nullable=True)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime, default=func.now())
updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
# Relationships
conversations = relationship("Conversation", back_populates="user_session", cascade="all, delete-orphan")
def __repr__(self):
return f"<UserSession(id={self.id}, user_identifier={self.user_identifier})>"