from typing import Optional from datetime import datetime from uuid import UUID, uuid4 from sqlmodel import SQLModel, Field, Relationship class Task(SQLModel, table=True): __tablename__ = "tasks" id: UUID = Field(default_factory=uuid4, primary_key=True, index=True, ) task_source: str job_started: Optional[datetime] = None job_completed: Optional[datetime] = None status: str = Field(default="In Progress") service: Optional[str] = None updated_at: datetime = Field(default_factory=datetime.utcnow) sub_tasks: list["SubTask"] = Relationship(back_populates="task") class SubTask(SQLModel, table=True): __tablename__ = "sub_task" id: UUID = Field(default_factory=uuid4, primary_key=True, index=True, ) task_id: UUID = Field(foreign_key="tasks.id") job_started: Optional[datetime] = None job_completed: Optional[datetime] = None status: str = Field(default="In Progress") inputs: Optional[str] = None outputs: Optional[str] = None cloud_logs_url: Optional[str] = None updated_at: datetime = Field(default_factory=datetime.utcnow) task: Optional["Task"] = Relationship(back_populates="sub_tasks")