import uuid from datetime import date, datetime from pydantic import BaseModel, ConfigDict from api.models.workstream import WorkstreamStatus from api.schemas.workstream_dependency import WorkstreamDepStub class WorkstreamCreate(BaseModel): topic_id: uuid.UUID slug: str title: str description: str | None = None status: WorkstreamStatus = WorkstreamStatus.active owner: str | None = None due_date: date | None = None repo_id: uuid.UUID | None = None # GEMS primary: the owning repository repo_goal_id: uuid.UUID | None = None class WorkstreamUpdate(BaseModel): title: str | None = None description: str | None = None status: WorkstreamStatus | None = None owner: str | None = None due_date: date | None = None repo_id: uuid.UUID | None = None repo_goal_id: uuid.UUID | None = None class WorkstreamRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID topic_id: uuid.UUID repo_id: uuid.UUID | None = None repo_goal_id: uuid.UUID | None = None slug: str title: str description: str | None = None status: WorkstreamStatus owner: str | None = None due_date: date | None = None created_at: datetime updated_at: datetime class WorkstreamWithTaskCounts(WorkstreamRead): tasks_total: int = 0 tasks_todo: int = 0 tasks_in_progress: int = 0 tasks_blocked: int = 0 tasks_done: int = 0 class WorkstreamWithDeps(WorkstreamWithTaskCounts): """WorkstreamWithTaskCounts enriched with dependency graph edges.""" depends_on: list[WorkstreamDepStub] = [] blocks: list[WorkstreamDepStub] = []