Files
work-queue-api/app/models.py
Steve W fbc88bb62b
Some checks failed
ci / build-test-push (push) Failing after 1m42s
feat: rebuild work queue api with fastapi and postgres
2026-04-11 19:24:52 +00:00

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