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 @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 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] = []