from datetime import datetime from typing import TYPE_CHECKING from pydantic import BaseModel, Field from core_domain import HumanTaskContract, HumanTaskStatus, HumanTaskType from core_shared import JSONValue if TYPE_CHECKING: from app.db.models import HumanTask class HumanTaskCreateRequest(BaseModel): tenant_id: str task_type: HumanTaskType title: str description: str | None = None source_type: str | None = None source_id: str | None = None run_id: str | None = None node_run_id: str | None = None requested_by: str | None = None assigned_to: str | None = None request_payload_json: dict[str, JSONValue] = Field(default_factory=dict) due_time: datetime | None = None class HumanTaskClaimRequest(BaseModel): tenant_id: str claimed_by: str class HumanTaskCompleteRequest(BaseModel): tenant_id: str status: HumanTaskStatus response_payload_json: dict[str, JSONValue] = Field(default_factory=dict) class HumanTaskResponse(HumanTaskContract): @classmethod def from_entity(cls, entity: "HumanTask") -> "HumanTaskResponse": return cls.model_validate(entity, from_attributes=True)