import uuid from datetime import date, datetime from pydantic import BaseModel, ConfigDict, model_validator from api.models.task import TaskPriority, TaskStatus class TaskCreate(BaseModel): workstream_id: uuid.UUID title: str description: str | None = None status: TaskStatus = TaskStatus.todo priority: TaskPriority = TaskPriority.medium assignee: str | None = None due_date: date | None = None blocking_reason: str | None = None parent_task_id: uuid.UUID | None = None class TaskUpdate(BaseModel): title: str | None = None description: str | None = None status: TaskStatus | None = None priority: TaskPriority | None = None assignee: str | None = None due_date: date | None = None blocking_reason: str | None = None parent_task_id: uuid.UUID | None = None @model_validator(mode="after") def blocking_reason_required_when_blocked(self) -> "TaskUpdate": if self.status == TaskStatus.blocked and not self.blocking_reason: raise ValueError("blocking_reason is required when status is blocked") return self class TaskRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID workstream_id: uuid.UUID title: str description: str | None = None status: TaskStatus priority: TaskPriority assignee: str | None = None due_date: date | None = None blocking_reason: str | None = None parent_task_id: uuid.UUID | None = None created_at: datetime updated_at: datetime