"""前端展示flow用到的数据结构"""
from typing import Any
from pydantic import BaseModel, Field
from apps.schemas.enum_var import SpecialCallType
from apps.schemas.enum_var import EdgeType
class NodeMetaDataItem(BaseModel):
"""节点元数据类"""
node_id: str = Field(alias="nodeId")
call_id: str = Field(alias="callId")
name: str
description: str
parameters: dict[str, Any] | None
editable: bool = Field(default=True)
created_at: float | None = Field(alias="createdAt")
class NodeServiceItem(BaseModel):
"""GET /api/flow/service 中单个service信息以及service下的节点元数据的信息"""
service_id: str = Field(..., alias="serviceId", description="服务ID")
name: str = Field(..., description="服务名称")
type: str = Field(..., description="服务类型")
node_meta_datas: list[NodeMetaDataItem] = Field(alias="nodeMetaDatas", default=[])
created_at: str | None = Field(default=None, alias="createdAt", description="创建时间")
class PositionItem(BaseModel):
"""请求/响应中的前端相对位置变量类"""
x: float = Field(default=0.0)
y: float = Field(default=0.0)
class DependencyItem(BaseModel):
"""请求/响应中的节点依赖变量类"""
node_id: str = Field(alias="nodeId")
type: str
class NodeItem(BaseModel):
"""请求/响应中的节点变量类"""
step_id: str = Field(alias="stepId", default="")
service_id: str = Field(alias="serviceId", default="")
node_id: str = Field(alias="nodeId", default="")
name: str = Field(default="")
call_id: str = Field(alias="callId", default=SpecialCallType.EMPTY.value)
description: str = Field(default="")
enable: bool = Field(default=True)
parameters: dict[str, Any] = Field(default={})
depedency: DependencyItem | None = None
position: PositionItem = Field(default=PositionItem())
editable: bool = Field(default=True)
class EdgeItem(BaseModel):
"""请求/响应中的边变量类"""
edge_id: str = Field(alias="edgeId")
source_node: str = Field(alias="sourceNode")
target_node: str = Field(alias="targetNode")
type: str = Field(default=EdgeType.NORMAL.value)
branch_id: str = Field(alias="branchId")
class FlowItem(BaseModel):
"""请求/响应中的流变量类"""
flow_id: str | None = Field(alias="flowId", default="工作流ID")
name: str = Field(default="工作流名称")
description: str = Field(default="工作流描述")
enable: bool = Field(default=True)
editable: bool = Field(default=True)
nodes: list[NodeItem] = Field(default=[])
edges: list[EdgeItem] = Field(default=[])
created_at: float | None = Field(alias="createdAt", default=0)
connectivity: bool = Field(default=False, description="图的开始节点和结束节点是否联通,并且除结束节点都有出边")
focus_point: PositionItem = Field(alias="focusPoint", default=PositionItem())
debug: bool = Field(default=False)