Files
WhatsAppCentralizado/services/api-gateway/app/models/flow.py
Claude AI 257baaaf19 feat(fase2): add Flow models, Flow Engine setup, update Docker Compose
- Add Flow and FlowSession SQLAlchemy models for chatbot flows
- Add TriggerType enum (welcome, keyword, fallback, event, manual)
- Setup flow-engine service with FastAPI structure
- Add flow-engine to docker-compose.yml

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 10:17:44 +00:00

45 lines
1.7 KiB
Python

import uuid
from datetime import datetime
from sqlalchemy import Column, String, Boolean, DateTime, Text, Integer, Enum as SQLEnum
from sqlalchemy.dialects.postgresql import UUID, JSONB
import enum
from app.core.database import Base
class TriggerType(str, enum.Enum):
WELCOME = "welcome"
KEYWORD = "keyword"
FALLBACK = "fallback"
EVENT = "event"
MANUAL = "manual"
class Flow(Base):
__tablename__ = "flows"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name = Column(String(100), nullable=False)
description = Column(Text, nullable=True)
trigger_type = Column(SQLEnum(TriggerType), nullable=False)
trigger_value = Column(String(255), nullable=True)
nodes = Column(JSONB, default=list)
edges = Column(JSONB, default=list)
variables = Column(JSONB, default=dict)
is_active = Column(Boolean, default=False, nullable=False)
version = Column(Integer, default=1, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
class FlowSession(Base):
__tablename__ = "flow_sessions"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
conversation_id = Column(UUID(as_uuid=True), nullable=False, index=True)
flow_id = Column(UUID(as_uuid=True), nullable=False)
current_node_id = Column(String(100), nullable=True)
variables = Column(JSONB, default=dict)
waiting_for_input = Column(Boolean, default=False)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)