from sqlalchemy import Column, String, DateTime, Boolean, ForeignKey
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from uuid import uuid4
from app.models.database import Base
class Conversation(Base):
"""Model representing a conversation.
A conversation is a sequence of related questions and answers
within a user session.
"""
__tablename__ = "conversations"
id = Column(String, primary_key=True, default=lambda: str(uuid4()))
user_session_id = Column(String, ForeignKey("user_sessions.id"), nullable=False)
topic = 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
user_session = relationship("UserSession", back_populates="conversations")
messages = relationship("Message", back_populates="conversation", cascade="all, delete-orphan")
def __repr__(self):
return f"<Conversation(id={self.id}, user_session_id={self.user_session_id})>"