from sqlalchemy import ( Column, String, Integer, Text, TIMESTAMP, CheckConstraint, ForeignKey, func, ) from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.ext.declarative import declarative_base import uuid Base = declarative_base() class UserProfile(Base): __tablename__ = "user_profiles" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) name = Column(String(100), nullable=False) age = Column(Integer, CheckConstraint("age > 0 AND age <= 150")) gender = Column(String(20), CheckConstraint( "gender IN ('Male', 'Female', 'Non-binary', 'Other', 'Prefer not to say')" )) city_region = Column(String(100)) profession = Column(String(100)) marital_status = Column(String(30), CheckConstraint( "marital_status IN ('Single', 'In relationship', 'Married', 'Divorced', 'Widowed', 'Other', 'Prefer not to say')" )) previous_mental_diagnosis = Column(Text, default="NA") ethnicity = Column(String(50)) created_at = Column(TIMESTAMP(timezone=True), server_default=func.now()) updated_at = Column(TIMESTAMP(timezone=True), server_default=func.now(), onupdate=func.now()) class ConversationHistory(Base): __tablename__ = "conversation_history" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id = Column(UUID(as_uuid=True), ForeignKey("user_profiles.id", ondelete="CASCADE"), nullable=False) message = Column(Text, nullable=False) response = Column(Text, nullable=False) timestamp = Column(TIMESTAMP(timezone=True), server_default=func.now())