66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel, ConfigDict, field_validator
|
|
from pydantic.alias_generators import to_camel
|
|
|
|
|
|
def _coerce_optional_id(value):
|
|
if value is None:
|
|
return None
|
|
return str(value).strip()
|
|
|
|
|
|
class WorkflowNodeCreate(BaseModel):
|
|
model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
|
|
|
|
node_name: str
|
|
node_order: int
|
|
approver_id: Optional[str] = None
|
|
approver_name: Optional[str] = None
|
|
action_type: Optional[str] = "approve"
|
|
|
|
@field_validator("approver_id", mode="before")
|
|
@classmethod
|
|
def validate_approver_id(cls, value):
|
|
return _coerce_optional_id(value)
|
|
|
|
|
|
class WorkflowNodeOut(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True, populate_by_name=True, alias_generator=to_camel)
|
|
|
|
id: str
|
|
node_name: str
|
|
node_order: int
|
|
approver_id: Optional[str] = None
|
|
approver_name: Optional[str] = None
|
|
action_type: Optional[str] = "approve"
|
|
|
|
|
|
class WorkflowDefCreate(BaseModel):
|
|
model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
|
|
|
|
biz_type: str
|
|
wf_name: str
|
|
status: int = 1
|
|
nodes: Optional[List[WorkflowNodeCreate]] = None
|
|
|
|
|
|
class WorkflowDefUpdate(BaseModel):
|
|
model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
|
|
|
|
biz_type: Optional[str] = None
|
|
wf_name: Optional[str] = None
|
|
status: Optional[int] = None
|
|
nodes: Optional[List[WorkflowNodeCreate]] = None
|
|
|
|
|
|
class WorkflowDefOut(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True, populate_by_name=True, alias_generator=to_camel)
|
|
|
|
id: str
|
|
biz_type: str
|
|
wf_name: str
|
|
status: int
|
|
create_by: Optional[str] = None
|
|
nodes: List[WorkflowNodeOut] = []
|