from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, Text from sqlalchemy.orm import relationship from app.core.db import Base, utc_now class Conversation(Base): __tablename__ = "conversations" id = Column(String, primary_key=True) user_id = Column(String, ForeignKey("users.id"), nullable=False) started_at = Column(DateTime(timezone=True), default=utc_now) last_message_at = Column(DateTime(timezone=True), nullable=True) ended_at = Column(DateTime(timezone=True), nullable=True) duration_seconds = Column(Integer, default=0) summary = Column(Text, nullable=True) status = Column(String, default="active") current_topic = Column(String, nullable=True) conversation_stage = Column(String, nullable=True) user = relationship("User", back_populates="conversations") segments = relationship( "Segment", back_populates="conversation", cascade="all, delete-orphan" ) class Segment(Base): __tablename__ = "segments" id = Column(String, primary_key=True) conversation_id = Column(String, ForeignKey("conversations.id"), nullable=False) audio_url = Column(String, nullable=True) transcript_text = Column(Text, nullable=False) created_at = Column(DateTime(timezone=True), default=utc_now) processed = Column(Boolean, default=False) topic_category = Column(String, nullable=True) agent_response = Column(Text, nullable=True) conversation = relationship("Conversation", back_populates="segments")