from sqlalchemy import Column, String, Boolean, DateTime, Text, Integer, Float from sqlalchemy.dialects.postgresql import UUID, JSONB from datetime import datetime from app.database import Base import uuid class PreferenceAnalysis(Base): __tablename__ = "preference_analyses" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id = Column(UUID(as_uuid=True), nullable=False, index=True, unique=True) task_type = Column(String(50), nullable=False, default="reply") preferred_tone = Column(String(50)) preferred_style = Column(String(50)) common_replacements = Column(JSONB, default=[]) avg_formality_score = Column(Float, default=0.5) greeting_style = Column(String(100)) sign_off_style = Column(String(100)) analysis_data = Column(JSONB, default={}) confidence = Column(Float, default=0.0) interaction_count = Column(Integer, default=0) last_analysis_at = Column(DateTime) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) class MarketingEffect(Base): __tablename__ = "marketing_effects" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id = Column(UUID(as_uuid=True), nullable=False, index=True) content_hash = Column(String(64), nullable=False, index=True) product_id = Column(UUID(as_uuid=True)) product_name = Column(String(255)) channel = Column(String(50), default="copy") event_type = Column(String(50), nullable=False) target_audience = Column(String(255)) effect_metadata = Column("metadata", JSONB, default={}) created_at = Column(DateTime, default=datetime.utcnow)