feat(fase2): add Flow schemas and Flow Engine core
API Gateway: - Add Pydantic schemas for Flow API (create, update, response, nodes, edges) Flow Engine: - Add FlowContext for variable management and interpolation - Add FlowEngine for executing chatbot flows - Support node types: trigger, message, buttons, wait_input, condition, set_variable Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,15 @@ from app.schemas.auth import (
|
||||
UserResponse,
|
||||
CreateUserRequest,
|
||||
)
|
||||
from app.schemas.flow import (
|
||||
NodeData,
|
||||
FlowNode,
|
||||
FlowEdge,
|
||||
FlowCreate,
|
||||
FlowUpdate,
|
||||
FlowResponse,
|
||||
FlowListResponse,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"LoginRequest",
|
||||
@@ -14,4 +23,11 @@ __all__ = [
|
||||
"RefreshRequest",
|
||||
"UserResponse",
|
||||
"CreateUserRequest",
|
||||
"NodeData",
|
||||
"FlowNode",
|
||||
"FlowEdge",
|
||||
"FlowCreate",
|
||||
"FlowUpdate",
|
||||
"FlowResponse",
|
||||
"FlowListResponse",
|
||||
]
|
||||
|
||||
74
services/api-gateway/app/schemas/flow.py
Normal file
74
services/api-gateway/app/schemas/flow.py
Normal file
@@ -0,0 +1,74 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional, List
|
||||
from uuid import UUID
|
||||
from datetime import datetime
|
||||
from app.models.flow import TriggerType
|
||||
|
||||
|
||||
class NodeData(BaseModel):
|
||||
label: str
|
||||
type: str
|
||||
config: dict = {}
|
||||
|
||||
|
||||
class FlowNode(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
position: dict
|
||||
data: NodeData
|
||||
|
||||
|
||||
class FlowEdge(BaseModel):
|
||||
id: str
|
||||
source: str
|
||||
target: str
|
||||
sourceHandle: Optional[str] = None
|
||||
targetHandle: Optional[str] = None
|
||||
|
||||
|
||||
class FlowCreate(BaseModel):
|
||||
name: str
|
||||
description: Optional[str] = None
|
||||
trigger_type: TriggerType
|
||||
trigger_value: Optional[str] = None
|
||||
|
||||
|
||||
class FlowUpdate(BaseModel):
|
||||
name: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
trigger_type: Optional[TriggerType] = None
|
||||
trigger_value: Optional[str] = None
|
||||
nodes: Optional[List[dict]] = None
|
||||
edges: Optional[List[dict]] = None
|
||||
variables: Optional[dict] = None
|
||||
is_active: Optional[bool] = None
|
||||
|
||||
|
||||
class FlowResponse(BaseModel):
|
||||
id: UUID
|
||||
name: str
|
||||
description: Optional[str]
|
||||
trigger_type: TriggerType
|
||||
trigger_value: Optional[str]
|
||||
nodes: List[dict]
|
||||
edges: List[dict]
|
||||
variables: dict
|
||||
is_active: bool
|
||||
version: int
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class FlowListResponse(BaseModel):
|
||||
id: UUID
|
||||
name: str
|
||||
trigger_type: TriggerType
|
||||
is_active: bool
|
||||
version: int
|
||||
updated_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
Reference in New Issue
Block a user