77 lines
1.8 KiB
Python
77 lines
1.8 KiB
Python
from datetime import datetime
|
|
from typing import Any, Literal
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
Status = Literal["queued", "dispatched", "in_progress", "blocked", "failed", "completed", "cancelled"]
|
|
Outcome = Literal["success", "failed", "cancelled"]
|
|
|
|
|
|
class ProjectCreate(BaseModel):
|
|
name: str
|
|
external_ref: str | None = None
|
|
|
|
|
|
class ProjectUpdate(BaseModel):
|
|
name: str | None = None
|
|
external_ref: str | None = None
|
|
|
|
|
|
class Project(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: UUID
|
|
name: str
|
|
external_ref: str | None = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class WorkCreate(BaseModel):
|
|
project_id: UUID | None = None
|
|
type: str
|
|
description: str
|
|
payload: dict[str, Any] | None = None
|
|
priority: int = Field(default=3, ge=1, le=5)
|
|
assigned_agent: str | None = None
|
|
created_by: str | None = None
|
|
|
|
|
|
class WorkUpdate(BaseModel):
|
|
status: Status | None = None
|
|
outcome: Outcome | None = None
|
|
notes: str | None = None
|
|
assigned_agent: str | None = None
|
|
|
|
|
|
class DispatchLog(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: UUID
|
|
work_item_id: UUID
|
|
dispatched_at: datetime
|
|
agent: str
|
|
completed_at: datetime | None = None
|
|
outcome: Outcome | None = None
|
|
|
|
|
|
class WorkItem(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: UUID
|
|
project_id: UUID | None = None
|
|
type: str
|
|
description: str
|
|
payload: dict[str, Any] | None = None
|
|
priority: int
|
|
status: Status
|
|
assigned_agent: str | None = None
|
|
created_by: str | None = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
completed_at: datetime | None = None
|
|
outcome: Outcome | None = None
|
|
notes: str | None = None
|
|
dispatch_log: list[DispatchLog] = []
|