"""AI Suggestion model for tracking AI-applied changes to flows.""" import uuid from datetime import datetime, timezone from typing import Optional from sqlalchemy import DateTime, ForeignKey, String from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Mapped, mapped_column from app.core.database import Base class AISuggestion(Base): __tablename__ = "ai_suggestions" id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4 ) tree_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("trees.id", ondelete="CASCADE"), nullable=False, index=True, ) user_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True, ) session_id: Mapped[Optional[uuid.UUID]] = mapped_column( UUID(as_uuid=True), ForeignKey("ai_chat_sessions.id", ondelete="SET NULL"), nullable=True, ) action_type: Mapped[str] = mapped_column( String(50), nullable=False ) target_node_id: Mapped[Optional[str]] = mapped_column( String(255), nullable=True ) changes_json: Mapped[dict] = mapped_column( JSONB, nullable=False, default=dict ) status: Mapped[str] = mapped_column( String(20), nullable=False, default="pending" ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), nullable=False, ) resolved_at: Mapped[Optional[datetime]] = mapped_column( DateTime(timezone=True), nullable=True )