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>
This commit is contained in:
Claude AI
2026-01-29 10:17:44 +00:00
parent 4a004b0b00
commit 257baaaf19
7 changed files with 108 additions and 1 deletions

View File

@@ -1,4 +1,5 @@
from app.models.user import User
from app.models.whatsapp import WhatsAppAccount, Contact, Conversation, Message
from app.models.flow import Flow, FlowSession, TriggerType
__all__ = ["User", "WhatsAppAccount", "Contact", "Conversation", "Message"]
__all__ = ["User", "WhatsAppAccount", "Contact", "Conversation", "Message", "Flow", "FlowSession", "TriggerType"]

View File

@@ -0,0 +1,44 @@
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)